Skip to content

0876.链表的中间结点

给你单链表的头结点 head ,请你找出并返回链表的中间结点。

如果有两个中间结点,则返回第二个中间结点

示例 1:

1768572864318

输入: head = [1,2,3,4,5]

输出:[3,4,5]

解释:链表只有一个中间结点,值为 3 。

示例 2:

1768572874555

输入:head = [1,2,3,4,5,6]

输出:[4,5,6]

解释:该链表有两个中间结点,值分别为 3 和 4 ,返回第二个结点。

提示:

  • 链表的结点数范围是 [1, 100]
  • 1 <= Node.val <= 100

思路

两个指针,一个快指针 fast 每次走两步,一个慢指针 slow 每次走一步,当快指针到达链表末尾时,慢指针正好到达链表中间位置。

解答

class Solution {
public:
    ListNode* middleNode(ListNode* head) {
        ListNode* slow = head;
        ListNode* fast = head;

        while(fast != NULL && fast->next!= NULL){
            slow = slow->next;
            fast = fast->next->next;
        }   

        return slow;
    }
};