贡献者: int256
首先需要注意的一点,Floyd 判圈算法不是 Floyd 全源最短路算法。Floyd 判圈算法是用来判断链表中是否有圈(或环)的存在的。
Floyd 判圈算法(又称为 Floyd 判环算法或龟兔赛跑算法)的思想类似于快慢指针。原理是 “龟兔赛跑”,慢指针每次向前移动
下面给出一个常见的实现方法:
在找到环后可以很容易地求出环的长度,固定 fast
快指针不动,然后让 slow
慢指针一直移动直到再与 fast
快指针相遇,这移动的距离恰好就是环的长度。
假设链表是类似于如下形式:
不失一般性地,考虑这个环的逆时针走的。
设环长
而我们知道,快慢指针速度是两倍关系,而
注意这里,快慢指针要从同一起点出发。快指针 fast
不可以先走一步。