Loading

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;
    }
}
posted @ 2020-10-24 11:45  上海井盖王  阅读(139)  评论(0)    收藏  举报