问题:如何检测一个链表是否有环(循环节),如果有,那么如何确定环的起点以及环的长度。
空间要求:不能存储所经过的的每一个点。
举例:x0=1x0=1,xi+1=f(xi)xi+1=f(xi),求循环节的起始位置以及循环节的长度。
求解步骤:
1.判断是否有环
使用两个指针slow和fast。两个指针开始时均在头节点处(SS点),slow指针(龟)一次向后移动一个一步,fast指针(兔)一次向后移动两步。若存在环,则slow和fast必能相遇;反之若slow到达链表尾时两个指针仍不能相遇,则不存在环。
证明
设头节点
与循环节起始点