证明-快慢指针找链表环

快慢指针证明

(1)先证明两个指针可以相遇

1、如果链表没有环,那么快指针比慢指针先到达尾部(指向null)。

2、如果链表有环的话,因为快指针走的比慢指针快,所以在环中相遇的过程可以看作是快指针从环后边追赶慢指针的过程。

用递归法证明,快慢指针一定会相遇:

(1)快指针与慢指针之间差一步。此时继续往后走,慢指针前进一步,快指针前进两步,两者相遇。
(2)快指针与慢指针之间差两步。此时继续往后走,慢指针前进一步,快指针前进两步,两者之间相差一步,转化为第一种情况。
(3)快指针与慢指针之间差N步。此时继续往后走,慢指针前进一步,快指针前进两步,两者之间相差(N+1-2)即N-1步。重复这个过程,直到快指针和慢指针相遇。

因此,此题得证。所以快指针必然与慢指针相遇。

(2)再证明:相遇后,fast从头走,slow从当前走,速度一样,再相遇就是环入口

第一次相遇时,快指针走m圈环,慢指针走n圈环。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43778308/article/details/110262879
今日推荐