判断一个链表是否有环引发出的思考

来源:互联网 发布:马来西亚翻译中文软件 编辑:程序博客网 时间:2024/06/13 00:13

看到一个面试题:检测一个单向链表是否有环。

知道答案是,用两个指针,一个指针每次走一步,一个指针一次走两步。如果没有环,则走得快的指针先到达尾部,也就是为null。如果有环,那么这两个指针一定会在环内相遇。

当时想不通为什么会有这样的结论。没有换好理解,有环为什么一定回相遇呢?

然后上搜索,看到大神举的一个例子,恍然大悟。原来就是这么简单。


假设两个指针都进入了环内,且还未相遇。假设指针p1每次走一步,指针p2每次走两步。且假设此时p2还有与p1相隔n步。因为p2每次走两步,p1每次走一步,所以每次p2都向p1靠近一步,所以经过n此之后,他们必定相遇。其实只要每次走得快的那个比走得慢的那个都是快1步,不论他们每次走的是几步,只要保证速度相差一就一定会相遇。


0 0
原创粉丝点击