DW做网站入门步骤教学,泰国服务器租用,wordpress中运行程序,13岁找对象去哪个软件Problem: 2095. 删除链表的中间节点 文章目录 思路解题方法复杂度Code 思路 利用快慢指针#xff0c;快指针每次走两步#xff0c;慢指针每次走一步#xff08;循环退出条件是fast指针不为空同时fast.next不为空#xff09;#xff0c;但是我们容易发现这样到最后slow指针… Problem: 2095. 删除链表的中间节点 文章目录 思路解题方法复杂度Code 思路 利用快慢指针快指针每次走两步慢指针每次走一步循环退出条件是fast指针不为空同时fast.next不为空但是我们容易发现这样到最后slow指针正好指向我们需要删除的节点由于没有前指针这样我们不便操作。此时可以借助虚拟头节点解决此问题。 解题方法 1.慢指针指向虚拟头节点快指针指向链表头节点 2.快指针每次走两步慢指针走一步循环退出条件是fast指针不为空同时fast.next不为空 3.最后将慢指针指向的节点的next指针指向其下一个节点的下一个节点solw.next sole.next.next 复杂度
时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( 1 ) O(1) O(1) Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this.next next; }* }*/
class Solution {public ListNode deleteMiddle(ListNode head) {ListNode dummy new ListNode();dummy.next head;ListNode fast head;ListNode slow dummy;while (fast ! null fast.next ! null) {fast fast.next.next;slow slow.next;}slow.next slow.next.next;return dummy.next;}
}