使用C#在LinkedList中进行循环检测

par*_*rsh 0 c# linked-list floyd-cycle-finding

在访谈问题中,"实现一种检测循环存在的算法".例如,链表有一个循环,如:

0--->1---->2---->3---->4---->5---->6
                 ?                 |
                 |                 ?
                11<—-22<—-12<—-9<—-8
Run Code Online (Sandbox Code Playgroud)

使用Floyd的循环检测,可以通过使用快速和慢速指针来解决此问题.我应该尝试比较

一个.链接的节点值,即

if (fast.data == slow.data) 
    break;
Run Code Online (Sandbox Code Playgroud)

快速和慢速的类型 Link

class Link
{
    int IData {get; set;}
    Link Next {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

要么

他们是否指向相同的参考,即if (fast == slow)

谢谢.

Jon*_*eet 7

您应该只比较节点本身.毕竟,有一个包含重复数据的链表是合理的,而实际上没有一个循环.

我会它们为节点而不是链接.链接只是从一个节点到下一个节点或前一个节点的引用 - 特别是,没有与链接相关联的数据,仅与节点相关联.