快速寻找单链表的中间结点

思路:

  1. 有两个指针同时从开头(首元结点)遍历
  2. 一个快指针一次走两步,一个慢指针一次走一步
  3. 快指针先到链表尾部,满指针恰好到达链表中部(当链表长度为奇数时,满指针指向的是链表中间结点;当链表长度为偶数时,满指针指向的结点和满指针指向结点的下一个结点都是链表的中间结点)
//设立两个指针fast和slow,它们分别从head开始,fast走两步slow走一步,当fast走到最后一个结点的时候slow正好走到中点
Node* searchMid(Node* head) {
    Node *fast = head, *slow = head;

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

    return slow;
}

猜你喜欢

转载自www.cnblogs.com/fuqia/p/10261161.html