876. [链表][双指针]链表的中间结点
876. 链表的中间节点
朴素解法:这道题最朴素的做法是,先遍历一次,计算链表的长度,进而计算链表中间结点的下标(注意偶数结点的时候,得到的是中间的第二个结点),然后再遍历一次,来到所要求结点的位置。
缺点:
- 必须先遍历完整个链表,然后才可以「干正事」,再遍历到一半,找到中间结点;
- 在链表的长度很长的时候,这种方法之前的等待会很久。
方法一:双指针(快慢指针)
class Solution {
public ListNode middleNode(ListNode head) {
if (head.next != null){
return head;
}
ListNode slow = head, fast = head.next.next;
while(fast != null && fast.next != null){
slow = slow.next;
fast = fast.next.next;
}
return slow.next;
}
}

浙公网安备 33010602011771号