algorithm - 链表循环检测算法

标签 algorithm linked-list floyd-cycle-finding

我在网上看了一些面试问题,关于如果链表中有循环你会如何找到,解决方案(Floyd's cycle-finding algorithm)是有两个指针,一个比另一个快 2 倍,并检查它们是否再次相遇.

我的问题是:为什么我不能只让一个指针固定不动,而是每次将另一个指针向前移动 1 步?

最佳答案

因为可能不是完整的 linkedList 在循环中。

对于一个链表lasso检测算法,你需要两个指针:

enter image description here

只要第一个指针在牛仔所在的位置,就不会检测到环路。但如果你一步一步地向前移动,它最终会进入循环。


顺便说一句,lasso 是图论中的技术终点,而 cowboy 不是。

关于algorithm - 链表循环检测算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7398703/

相关文章:

java - 关于链表去环逻辑的问题

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

ruby-on-rails - ActiveRecord 关系的排序问题

c++ - Floyd 算法 - 循环检测 - 不终止的例子

algorithm - 如何找到循环不变性并证明正确性?

c - 链表中的意外输出

c++ - 打乱链表

c++ - 链表覆盖之前的值

algorithm - 在小内存(小于 50 MB)中存储大量二进制数的最佳方法是什么

algorithm - 分组组合算法