题目描述
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
题目分析
1.一快一慢指针,先找到碰撞点。
2.然后碰撞点到入口节点的距离就是头结点到入口节点的距离。
具体原理可以看这里:http://www.cnblogs.com/wuguanglin/p/LoopOfLinkList.html
代码
/* function ListNode(x){
this.val = x;
this.next = null;
}*/
function EntryNodeOfLoop(pHead) {
let fast = pHead;
let slow = pHead;
while (fast !== null && fast.next !== null) {
slow = slow.next;
fast = fast.next.next;
if (fast === slow) {
// 两者相遇
let p = pHead;
while (p !== slow) {
p = p.next;
slow = slow.next;
}
return p;
}
}
return null;
}