c_cpp 142.关联清单周期II-中 - 2018.7.30

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 142.关联清单周期II-中 - 2018.7.30相关的知识,希望对你有一定的参考价值。

/* 
同样设置快慢指针,步进分别为 1,2
起始点为 X,循环起点为 Y,第一次相遇的点为 Z
起点到循环的起点之间距离为 xy,循环的起点到第一次相遇的点距离为 yz,循环的长度为 r
有关系为:xy + yz = nr,n 为大于 0 的整数
xy + yz = nr 
=> xy + yz = (n - 1)r + (r - yz) + yz 
=> xy = (n - 1)r + (r - yz)
由 xy = (n - 1)r + (r - yz) 这一关系,可以推出 => 步进同样为 1 的指针,分别从起始点 X 和第一次相遇的 Z 点出发,最后都会相遇 Y 点。
 */
 
class Solution {
public:
    ListNode *detectCycle( ListNode *head ) {
        ListNode *slow = head, *fast = head;
        while (fast && fast->next) {
            slow = slow->next;
            fast = fast->next->next;
            if (slow == fast) {
                ListNode *slow2 = head;
                while (slow2 != slow) {
                    slow2 = slow2->next;
                    slow = slow->next;
                }
                return slow2;
            }
        }
        return NULL;
    }
};

以上是关于c_cpp 142.关联清单周期II-中 - 2018.7.30的主要内容,如果未能解决你的问题,请参考以下文章

java 142.链接列表周期II(#)。java

java 142.链接列表周期II(#)。java

java 142.链接列表周期II(#)。java

java 142.链接列表周期II(#)。java

java 142.链接列表周期II(#)。java

c_cpp 92.反向链接清单II - 中 - 2018.7.31