用JavaScript刷leetcode第142题-找环形链表起点

163 阅读1分钟

温馨提示

建议看此篇文章之前,先看 用JavaScript刷leetcode第141题-链表是否有环 这篇文章

一、题目描述

题目地址
视频讲解
git代码
找环形链表的环起点,即链表开始入环的第一个节点。
如果链表无环,则返回null

二、解题思路

下面是我自己手绘的图,很粗糙,但是不影响讲解题思路。如果看图不太明白,大家可以结合我的 视频讲解 来看
如果还是看不懂,就记住一个结论,相遇点到环起点距离 等于 头节点到环起点距离 环形链表-环的起点.jpg

三、具体代码

var detectCycle = function(head) {
  let p = head;
  let q = head;
  while(q && q.next) {
    p = p.next;
    q = q.next.next;
    if(p === q) {
      p = head;
      while(p !== q) {
        p = p.next;
        q = q.next;
      }
      return p;
    }
  }
  return null;
};