剑指offer(55)链表中环的入口节点

题目描述

给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出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;
}
原文地址:https://www.cnblogs.com/wuguanglin/p/EntryNodeOfLoop.html