我明白了,如果有一个周期,为什么兔子以速度 2 移动,乌龟以速度 1 移动,乌龟和兔子会相遇。因为如果循环长度为k,那么(2-1)*t(龟兔赛跑的距离)最终会被整除k。但我不明白的是,为什么为了找到入口点,乌龟和兔子都需要从同一位置开始。
这是我正确实施的。但只要改变初始条件,入口点的寻找就会永远循环下去。
if(!head || head->next==nullptr) return nullptr;
ListNode* fast=head->next->next;
ListNode* slow=head->next; // if changing to slow=head or fast=head->next the second loop below will loop forever.
while(fast!=nullptr && fast->next!=nullptr
&& slow!=nullptr && fast!=slow) {
fast = fast->next->next;
slow = slow->next;
}
if(fast!=nullptr && slow!=nullptr && fast==slow) {
slow = head;
while(fast!=slow){
fast = fast->next;
slow = slow->next;
}
return fast;
} else {
return nullptr;
}
如果乌龟和兔子处于同一个周期,它们就会相遇。从不同的位置开始,永远循环下去意味着乌龟和兔子处于不同的周期。