问题:如果循环存在于链表
中,找到循环的起始节点方法:
(1)使用Hare-Tortoise算法,查找是否存在循环(此步骤无问题)
(2)设P是野兔和乌龟相遇的节点。让H成为链表上的头指针。从H和P一次遍历一个节点直到它们相遇。
怀疑:背后的逻辑(2)。如何从H和P一次遍历一步确保它们将在循环开始时相遇?
参考文献:
Partially Explained Logic(Refer second approach in this blog)
答案 0 :(得分:1)
设T是乌龟所经过的链接数,让S为到达循环之前遍历的链接数。
我们知道沿着周期旅行的T链接会让你回到你开始的地方,因为乌龟和野兔分别在旅行T和2T链路后到达相同的地点P.如果你从P旅行S链接,这相当于从开始旅行S链接然后旅行T链接,这相当于从一开始就旅行S链接。
因此,当从列表开始行进的指针已经行进了S个链接时,它到达循环的开始,并且它与从P行进的指针相遇。