快慢指针判断环起点的数学解析

分析:
快慢指针判断环起点的数学解析_第1张图片

如图所示,快慢指针从起点出发,可以同时到达相遇点。

刚出发时,慢指针每次走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也刚好是环首位置。则两者相遇的位置就是环首的位置。

你可能感兴趣的:(Embed,System,单片机)