题目:一个链表中包含环,如何找出环的入口节点?
分析:指定两个指针P1,P2,P1每次前进一步,P2每次前进2步,若有环,他们必定在环中相遇。
链表如下,相遇后:
P1经过的距离为:x+ay+m
P2经过的距离为:x+by+m
则有2P1 = P2,即:
2(x+ay+m)=x+by+m
x=(b-2a)y-m
说明x经过的节点数为环n倍的节点数减去m个节点。
则一个指针从1开始,一个指针从相遇点开始,他们会在环的入口节点处相遇。
题目:一个链表中包含环,如何找出环的入口节点?
分析:指定两个指针P1,P2,P1每次前进一步,P2每次前进2步,若有环,他们必定在环中相遇。
链表如下,相遇后:
P1经过的距离为:x+ay+m
P2经过的距离为:x+by+m
则有2P1 = P2,即:
2(x+ay+m)=x+by+m
x=(b-2a)y-m
说明x经过的节点数为环n倍的节点数减去m个节点。
则一个指针从1开始,一个指针从相遇点开始,他们会在环的入口节点处相遇。