【发布时间】:2014-07-02 09:07:52
【问题描述】:
要在链表中找到循环,我们只需使用两个指针slow and fast。
slow = head->next;
fast = head->next->next;
while(slow != fast)
{
slow = head->next;
fast = head->next->next;
if(!slow || !fast)
{
cout<<" No Loop ";
break;
}
}
这样我们可以在链表中找到循环。 现在,如果我让慢指针跳转 2 个节点和快速跳转 3 个节点或慢 3 个节点和快速 4 个节点,会有什么影响......
我在我的代码中尝试了这个,但每次都得到正确的结果。 有人可以对此有所了解吗?另外,我立即想到的另一件事是,我们可以通过一些特定的慢速和快速指针选择进入无限循环,但找不到。
【问题讨论】:
-
请注意,您的伪代码是一个无限循环,因为它总是从
head开始,并且它从不处理给定列表不是循环的情况(有没有列表结束检查)。 -
@FrerichRaabev ...修改了伪代码....现在请给出我的答案。
-
慢和快仍然总是从头开始,所以在每次迭代中它们都有相同的值,所以它仍然是无限循环。此外,如果
head->next为空,则在尝试获取fast的值时,由于取消引用空指针而导致崩溃。 -
@DarthHunterix ....哦哦哦...我只是粗略地写了这段代码...我不想进入代码的正确性...我只是想理解这个概念。 .. 将跃点更改为慢速和快速是否会产生负面影响。
标签: c data-structures linked-list