解释如何在循环链表中查找循环起始节点?

解释如何在循环链表中查找循环起始节点?,第1张

解释如何在循环链表中查找循环起始节点?

这是用于循环检测的弗洛伊德算法。您正在询问算法的第二阶段-
找到一个节点是周期的一部分后,如何找到周期的 起点

在弗洛伊德算法的第一部分中,野兔乌龟的每一步移动了两步。如果乌龟和野兔相遇过,就会有一个循环,并且相遇点是循环的一部分,但不一定是循环中的第一个节点。

当乌龟和野兔相遇时,我们找到了最小的i(乌龟步数),使得X i = X 2i。令mu代表从X 0到循环开始的步数,令lambda代表循环的长度。然后,i =
mu +一个 lambda,而2i = mu + b
lambda,其中a和b是整数,表示乌龟和野兔在循环中跑了多少次。从第二个方程中减去第一个方程可得出i =(ba)
lambda,因此i是lambda的整数倍。
因此,X i + mu = X mu*。X
i代表乌龟和野兔的交汇点。如果您将乌龟移回起始节点X0,然后让乌龟和野兔以相同的速度继续前进,经过多步,乌龟将达到X mu,野兔将达到X i + mu =
X mu,因此第二个交点表示周期。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5652331.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存