分析:
如图所示,快慢指针从起点出发,可以同时到达相遇点。
刚出发时,慢指针每次走1个节点,快指针每次走两个节点,假设慢指针速度为v,则块指针速度为2v
相遇时,两个指针经历的时间都为t, 慢指针移动距离为(m+n),快指针移动距离比慢指针多了环周距离,所以为(m+n+r)
因此根据速度时间距离公式得到两个公式
慢指针:v * t = m + n
快指针:2 * v * t = m + n + r
两个公式可以得到: m + n = r
m = n - r
此时使得两个指针速度相同,一个从起点开始移动,一个从相遇点开始移动。当第一个指针移动了m的距离,到达环首节点;另一个则移动了相同的距离(n - r),从图中看,n - r也刚好是环首位置。则两者相遇的位置就是环首的位置。