如何在循环链表中查找循环起始节点?
我知道龟兔赛跑结束了一个循环的存在,但是如何将乌龟移动到链表的开头,同时将兔子保持在会场,然后一次移动两个步骤使它们在起点相遇周期?
-
这是Floyd
的循环检测算法。你在问算法的第二阶段——一旦你找到了一个属于循环的节点,如何找到循环的
开始 ?在弗洛伊德算法的第一部分,兔子每走一步,乌龟就移动两步。如果龟兔赛跑,就有一个循环,相遇点是循环的一部分,但不一定是循环中的第一个节点。
当乌龟和兔子相遇时,我们找到了最小的 i(乌龟走的步数),使得 X i = X 2i。让 mu 表示从 X 0到循环开始的步数,让 lambda
表示循环的长度。然后 i = mu + a lambda 和 2i = mu + b lambda,其中 a 和 b
是整数,表示龟兔赛跑了多少次。从第二个方程中减去第一个方程得到 i = (ba)lambda,所以 i 是 lambda 的整数倍。 因此,X i +
mu = X mu*。X i代表龟兔赛跑的交汇点。如果将乌龟移回起始节点 X0,让龟兔以同样的速度继续前进,经过 mu 个额外的步骤,乌龟将达到 X
mu,而兔子将达到 X i + mu = X mu,因此第二个交汇点表示开始循环。
-
解释如何在循环链表中查找循环起始节点?
2021-01-31 关注 0 浏览79 1答案
-
如何判断单链表是否是循环链表?
2020-01-31 关注 0 浏览516 1答案
-
双向链表和双向循环链表?
2019-11-24 关注 1 浏览1382 1答案
-
手写代码:循环链表插入元素?
2020-01-27 关注 0 浏览515 1答案
-
.写出在双向循环链表中,在指针p指向的节点之前插入一个q节点的算法。
2022-05-10 关注 0 浏览16 1答案
-
在一个双向循环链表中,指针p所指向的节点(非尾节点)之后插入指针s指向的节点,其
2022-03-03 关注 0 浏览50 1答案
-
在一个双向循环链表中,指针p所指向的节点(非尾节点)之后插入指针s指向的节...
2022-03-03 关注 0 浏览34 1答案
-
单循环链表的主要优点是()。
2020-12-25 关注 0 浏览133 1答案
-
一个长度为100的循环链表,指针A和指针B都指向了链表中的同一个节点,A以...
2022-03-03 关注 0 浏览14 1答案
-
一个长度为100的循环链表,指针A和指针B都指向了链表中的同一个节点,A以...
2022-03-02 关注 0 浏览24 1答案