gpt4 book ai didi

algorithm - 删除链表中的循环

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:23:04 27 4
gpt4 key购买 nike

问题:如果链表中存在循环,如何找到循环的起始节点

方法:

(1)使用Hare-Tortoise算法,判断环路是否存在(这一步没有问题)

(2)设P为兔子和乌龟相遇的节点。设H为链表头指针。从H和P开始逐一遍历一个节点,直到相遇。

疑点:(2)背后的逻辑。从 H 和 P 一次遍历一步如何确保它们在循环开始时相遇?

引用资料:

Problem and Solution

Partially Explained Logic(Refer second approach in this blog)

最佳答案

令 T 为乌龟遍历的链接数,令 S 为到达循环之前遍历的链接数。

我们知道,沿着循环行驶 T 条路段会使您回到起点,因为乌龟和野兔分别经过 T 条路段和 2T 条路段后到达同一地点 P。如果你从 P 开始走 S 条路,这相当于从一开始就走 S 条路然后走 T 条路,这相当于只从一开始走 S 条路。

因此,当从链表开头开始的指针走了 S 个链接时,它到达了循环的开始,并与从 P 开始的指针相遇。

关于algorithm - 删除链表中的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30333940/

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