使用 Floyd 算法找到循环的第一个节点,移动“快速指针”的速度比每个操作两个节点快?

问题描述 投票:0回答:1

在Floyd算法中,每个人使用一个每次操作移动到下一个节点的“慢指针”,和一个移动到next.next节点的“快速指针”。当它们相遇时,我们将“慢速指针”移动到 List 的开头,然后将两者移动(每次移动一个节点),直到我们再次到达公共节点。这个节点将是循环的开始。

这适用于像“slow=1”和“fast=2”这样的速度,但是我们可以用“fast>2”做同样的事情吗?

algorithm pointers data-structures
1个回答
0
投票

这和这个问题是一样的:

为什么在链表中查找循环时将指针增加 2,为什么不是 3、4、5?

简短的回答:你可以用 fast>2 来做,但它实际上会使总运行时间变慢,所以它并不是真正有益的。

您可以查看链接以获取详细证明。

© www.soinside.com 2019 - 2024. All rights reserved.