Skip to content

floyd判环(圈)算法

1、在阅读 labuladong 双指针技巧汇总 时,其中提及了快慢指针,其实它就是"floyd判环(圈)算法"

2、在 https://leetcode-cn.com/problems/linked-list-cycle/solution/huan-xing-lian-biao-by-leetcode-solution/

中,对它也有介绍。

csdn 算法-floyd判环(圈)算法

思考: 快慢指针是否一定会相遇?

NOTE:

1、上图源自: labuladong 双指针技巧汇总

是否存在一种情况,两个pointer永远无法相遇?如何进行论证?

1、设环中节点个数为N,fast的出发位置为F,slow的出发位置为L,当两者相遇的时候fast pointer走的长度一定是slow pointer走的长度的2倍。

2、假设fast pointer和slow pointer都从head出发,相遇的时候slow pointer走了k,则fast pointer走了2k,则环的长度为k?即fast pointer多走了circle长度?两者相遇的时候,fast pointer一定绕了circle?

labuladong 双指针技巧汇总 中,给出了非常好的图示:

NOTE: 1、需要注意的是,两个pointer是从同一个位置出发的

图片