gpt4 book ai didi

c - 这段代码如何在链表中查找循环?

转载 作者:行者123 更新时间:2023-11-30 16:02:43 25 4
gpt4 key购买 nike

Possible Duplicate:
Best algorithm to test if a linked list has a cycle

p=head;

q=head->next;
while(p!=NULL && q!=NULL)

{

if(p==q) { //Loop detected! exit(0); }

p=p->next;

q=(q->next)?(q->next->next):q->next; --how this line works ??

}

最佳答案

首先,如果列表中没有循环,则条件 p==q 永远不会为真,因为 q 始终“领先”于 p

然后,pq 之间的距离在每次迭代时增加 1。因此,如果存在循环,只要距离是循环长度的整数倍,条件 p==q 就会为真。

相关行将 q 向前移动 2 个位置。它首先检查 q 在向前移动一个位置后是否不会到达列表末尾,以避免空指针取消引用。 (q->nextq 前面一个位置,q->next->next 是前面两个位置。)

关于c - 这段代码如何在链表中查找循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4984328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com