Aiur – ZelluX 的技术博客

Security, Kernel, Virtualization, Programming Languages

带环链表求环的起点

107 views | without comments

很经典的问题了,求环的长度可以用两个步长分别为1和2的指针遍历链表,直到两者相遇,此时慢指针走过的长度就是环的长度。另外相遇后把其中指针重新设定为起始点,让两个指针以步长1再走一遍链表,相遇点就是环的起始点。

证明也很简单,注意第一次相遇时

慢指针走过的路程S1 = 非环部分长度 + 弧A长

快指针走过的路程S2 = 非环部分长度 + n * 环长 + 弧A长

S1 * 2 = S2,可得 非环部分长度 = n * 环长 – 弧A长

指针A回到起始点后,走过一个非环部分长度,指针B走过了相等的长度,也就是n * 环长 – 弧A长,正好回到环的开头。

Related Posts

Written by zellux

September 8th, 2008 at 8:45 pm

Posted in Algorithm/Mathematics

Tagged with

Leave a Reply

FireStats icon Powered by FireStatsBetter Tag Cloud