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