我知道可以通过一个慢速和另一个快速使用两个指针来完成。但是我还不清楚,如果有一个循环,那么我们如何确定慢速和快速指针在某一点上重叠。我猜可能有些情况下它们无限循环而没有重叠。两个必须重叠的周期数是否有任何等式或上限。
答案 0 :(得分:1)
忘记链接列表。并试着假设你和你的伙伴正在圆形赛道上比赛。但他比你快2倍。当你覆盖半圈时,你的好友将完成整个圈子,当你完成第一个圈子时,你的伙伴会比你快2倍。
现在用圆圈替换圆圈,这些圆点代表链表的节点。
但是假设你没有循环列表,那么你的伙伴会更快到达最后一个节点并完成比赛。
答案 1 :(得分:1)
考虑两个指针。 P1和P2。 (乌龟和野兔)
P1 P2 Delta
1 2 1
2 4 2
3 6 3
4 8 4
5 10 5
6 12 6
两步之间的距离增加1。最终(在循环中)他们将会面。
答案 2 :(得分:0)
这个想法是慢速(乌龟)指针在每一步中前进1项,而快速(野兔)指针前进2项。
当野兔非常靠近乌龟(在X处)时,让我们说它是后面的两个项目(X - 2)..下一步:
野兔的位置:X现在野兔只落后一项,下一步:
野兔位置:X + 2他们见面了。如您所见,如果它们之间的距离是2个项目,它们最终会相遇,如果距离是1个项目(如下面两个项目后面的步骤),它们将在下一步会面。
兔子总是快一步,所以不能“跳过”。