Leetcode 142.环形链表 II JavaScript (Day 10)

js一刷 哈希表

javascript 复制代码
var detectCycle = function(head) {
    let idx=new Map();
    let p1=head;
    while(p1){
        if(idx.has(p1))  return p1;
        idx.set(p1,1);
        p1=p1.next;
    }
    return null;
}

js 一刷 快慢指针

javascript 复制代码
 //我们的任务是找到入环点
var detectCycle = function(head) {
  let slow=head,fast=head;
  while(fast&&fast.next){
    fast=fast.next.next;
    slow=slow.next;
    if(fast===slow){
        let p1=head;
        while(p1!=slow){
            p1=p1.next;
            slow=slow.next;
        }
        return p1;
    }
    
  }
  return null;
}

算法核心:找到入环结点 并返回

假设进环前的路程为 a,环长为 c。设慢指针走了 b 步时,快慢指针相遇,此时快指针走了 2b步。显然 2b-b=nc(快指针比慢指针多走了 n 圈),即 b=nc。也就是说慢指针总共走过的路程是 nc,但这 nc 当中,实际上包含了进环前的一个小 a,因此慢指针在环中只走了 nc-a 步,它还得再往前走 a 步,才是完整的 n 圈。所以,我们让头节点和慢指针同时往前走,当他俩相遇时,就走过了最后这 a 步。

相关推荐
洛水水1 分钟前
【力扣100题】15.删除链表的倒数第 N 个结点
算法·leetcode·链表
不爱吃炸鸡柳14 分钟前
6道经典算法题详解:从排序到链表,覆盖面试高频考点
算法·链表·面试
蜡台16 分钟前
JavaScript async和awiat 使用
开发语言·前端·javascript·async·await
wfbcg16 分钟前
每日算法练习:LeetCode 3. 无重复字符的最长子串 ✅
算法·leetcode·职场和发展
tzy23319 分钟前
AI 对话的流式输出详解——不止于SSE
javascript·ai·llm·sse·readablestream
_日拱一卒20 分钟前
LeetCode:矩阵置零
java·数据结构·线性代数·算法·leetcode·职场和发展·矩阵
挖稀泥的工人20 分钟前
能够插入 DOM 的输入框
前端·javascript·vue.js
穿条秋裤到处跑22 分钟前
每日一道leetcode(2026.04.10):三个相等元素之间的最小距离 I
算法·leetcode
没有故事、有酒27 分钟前
Vue2中el-table修改表头高度和行高
javascript·vue.js·elementui
把csdn当日记本的菜鸡30 分钟前
Vue3 响应式 API 简单学习
javascript·vue.js·学习