c++ - 如何使用两个指针查找链表中是否存在循环?

标签 c++ c loops linked-list

<分区>

Possible Duplicate:
How to determine if a linked list has a cycle using only two memory locations.

你好,我在一次采访中被问到如何仅使用两个指针找到链接列表中存在的循环。

我做了以下事情:

1) 每次都找到链表的中心

2) 通过在最后迭代这两个指针将指向同一个节点,如果不指向同一个节点并找到一个 null,则链表中没有循环。

有什么有效的方法可以做到这一点...?

提前致谢

最佳答案

我认为您正在寻找 Floyd's cycle detection algorithm ,又称“龟兔赛跑算法”。这个想法是将一个指针(“乌龟”)设置为 列表中的第一个节点,以及指向下一项的另一个指针(“野兔”)。然后在 每走一步,“龟”指针前进一个位置,“兔子”指针前进两步。每次迭代后,检查指针以查看它们是否指向 同一个节点。如果发生这种情况,则该节点必须是循环的一部分。

为了找到循环的开始,将两个指针之一重新定位到 列表的开头,而另一个留在其当前位置。然后两个指针 是先进的,这一次对两个指针每次迭代一步,直到他们再次相遇。这个(第二个)交汇点是循环中的第一个节点。

关于c++ - 如何使用两个指针查找链表中是否存在循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3385680/

相关文章:

C程序退出后崩溃

c - 函数 main 中的表达式语法 (Turbo-C)

r - R 中的 For 循环不打印我需要的内容

ruby-on-rails - 许多非常相似的功能,意大利面条代码修复?

java - 适用于套接字流的C++/Java序列化库?

c++ - 更高效的 STL,如执行操作的方式,

返回前答对,返回后答错

javascript - for循环返回数组中一项的单个字母而不是数组中的每一项

c++ - 您是否应该依赖另一个 header 来获取它包含的 header ?

c++ - 包含不同大小静态数组的类的多个实例