为什么Floyd的寻环算法,乌龟和兔子都需要从同一个位置开始?

问题描述 投票:0回答:1

我明白了,如果有一个周期,为什么兔子以速度 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;
        }
c++ algorithm linked-list
1个回答
-1
投票

如果乌龟和兔子处于同一个周期,它们就会相遇。从不同的位置开始,永远循环下去意味着乌龟和兔子处于不同的周期。

© www.soinside.com 2019 - 2024. All rights reserved.