检测链表环路引发的思考

来源:互联网 发布:程序员相亲被骗 编辑:程序博客网 时间:2024/05/01 23:19

一个小小的数学游戏引发的奇妙思路之旅!

如题:请在O(n)时间复杂度内找出链表(存在环路)中环路的起点。

解答:设定双(快慢)指针,慢指针每次向后移动一个元素,快指针每次向后移动两个元素。两指针依次向后遍历,直到相遇。相遇时,将慢指针指向头节点,将快指针设置为慢指针,继续向后遍历,直到相遇。相遇节点即为环路的起始节点。

思考:实际上,巧妙地运用了速度为两倍的追赶相遇问题:他们会在前者的对称位置相遇。

0 0
原创粉丝点击