算法实现回顾2——链表环

链表找环最经典的就是快慢指针。而今天的主角也是它了。

快慢指针的思路就是,同时起跑的乌龟和兔子,若赛道无环,则永不相遇,反之则会相遇。

那么我们假定兔子速度是乌龟的2倍。

乌龟和兔子在环中某点相遇,有以下等式:2*x=x+n*k 其中x是乌龟走过的路程,n是兔子绕的圈数,k是圈长。

等式变换 x=n*k,理解就是乌龟走的路程刚好够绕n圈环,而这个路程也是从起点到当前位置的路程。

那么,让另一只乌龟此刻从起点出发,2只乌龟各自继续前进。

根据等式,又会在原先的那点相遇。再想,两者速度相同,那么两者在首次相遇后就一直同步前进。

两者相遇点必然是环的起点,不然两者速度相同且方向相同,必然不可能相遇。

posted on 2015-05-06 23:36  _nil_  阅读(150)  评论(0)    收藏  举报

导航