从head到起始点为a,起始点到相遇点为b,圈常为x;
fast走了a+b+n*x,
slow走了a+b+m*x;
a+b+n*x=2*(a+b+m*x)=》a+b=(n-2*m)*x=》在fast和slow相遇后再走a步即为起始点
class Solution {
public:
ListNode* detectCycle(ListNode *head) {
ListNode* fast=head,*slow=head;
while(fast&&fast->next)
{
fast=fast->next->next;
slow=slow->next;
if(fast==slow)
{
fast=head;
while(fast!=slow)
{
fast=fast->next;
slow=slow->next;
}
return fast;
}
}
return NULL;
}
};
本文介绍了一种利用快慢指针检测链表中是否存在环的高效算法,并详细解释了其工作原理。通过调整指针移动速度,该算法能在O(n)时间内找到环的起始点。
374

被折叠的 条评论
为什么被折叠?



