Floyd判圈算法
算法概述
Floyd 判圈算法(Floyd Cycle Detection Algorithm),又称龟兔赛跑算法(Tortoise and Hare Algorithm)。
是一个可以在有限状态机、迭代函数或者链表上判断是否存在环,求出该环的起点与长度的算法。
思路
设两个指针t
和h
已不同步伐(t
一步h
两步)从起点出发,如果存在环,两个指针必有某时刻相遇。
解决问题
是否存在环
设两个指针t
和h
已不同步伐(t
一步h
两步)从起点出发:
- 如果快指针到达了链表尾部,两者都没相遇,则没有环。
- 如果两个指针相遇,则有环。
环的长度
两个指针相遇,设相遇点为M
,让h
指针留在M
点,t
指针继续前进,每次一步。再次到达M
点时,前进的步数即为环的长度。
环的起点
两个指针相遇,设相遇点为M
,让h
指针留在M
点,t