Floyd的循环寻找算法证明(检测链表中的循环)

时间:2017-01-13 14:17:45

标签: algorithm pointers linked-list floyd-cycle-finding

该算法使用快速和慢速指针来检测链表中的循环。我的问题是,如何证明两个指针在循环中碰撞的点与循环开始之间的距离等于链表头部与循环开始之间的距离?

1 个答案:

答案 0 :(得分:-1)

将慢速指针的速度视为“ x”,将快速指针的速度视为“ 2x”。使用简单的相对运动,您可以证明如果存在循环,这两个最终会相遇。
现在,考虑时间是相同的,因此快速指针所经过的距离是慢速指针所经过的距离的两倍。
如果慢速行驶a + b,那么快速行驶a + 2b + c。该链接将为您提供更好的理解。
2 *(a + b)= a + 2b + c
求解此方程式,您得到a = c。
该问题已经回答,您可以参考下面的链接:
https://cs.stackexchange.com/questions/10360/floyds-cycle-detection-algorithm-determining-the-starting-point-of-cycle