📜  弗洛伊德的慢速指针和快速指针方法是如何工作的?

📅  最后修改于: 2021-05-05 01:35:40             🧑  作者: Mango

我们已经在链表的“检测”循环中讨论了Floyd的快速和慢速指针算法。

该算法是从链接列表的开头开始两个指针,分别是慢速和快速。我们一次移动一个慢节点,一次快速移动两个节点。如果有一个循环,那么他们一定会见面的。这种方法之所以有效,是因为以下事实。

1)当慢速指针进入循环时,快速指针必须在循环内部。令快指针为慢指针的距离k。

2)现在,如果考虑慢速和快速指针的移动,我们可以注意到它们之间的距离(从慢速到快速)在每次迭代后增加一。经过一个迭代(慢=慢的下一个和快速=下一个快速的下一个),慢和快之间的距离变为k + 1,经过两次迭代,k + 2,依此类推。当距离变为n时,它们会合,因为它们以长度n的周期运动。

例如,我们可以在下图中看到,初始距离为2。经过1次迭代,距离变为3,经过2次迭代,距离变为4。经过3次迭代,它变为距离0的5。它们相遇。

循环删除算法如何工作?
请参阅链接列表中的“检测并删除循环”的方法3