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