如何判断一个单链表是否有环?

快慢指针查询,快指针每次跳两个,慢指针每次跳一个,如果两指针相等时,就证明有环
环的入口:
用两个指针,一个指向快慢指针相交点(这里就是慢指针走,慢指针在走快指针的一半就相当于快指针走的路了,还会到这个点),一个指向单链表的头结点(模拟慢指针从头走,也是走快指针的一半),一起走,当两个指针相等时,就是环的入口。

数学思维:
设从单链表头节点到环入口节点的距离是D,环入口到相交点的距离是X,设slow和fast第一次相遇时fast走了n圈环,slow走的距离为len,那么fast走的距离是2*len,可以得出下面的两个等式:

len = D + X
2 * len = D + X + n * R

两个等式相减可以的到:len = n * R - X

相关推荐
©️2020 CSDN 皮肤主题: 技术工厂 设计师:CSDN官方博客 返回首页