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 步。

相关推荐
三十而立洋4 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁4 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
李少兄4 天前
JavaScript 隐式全局变量解析
javascript
旖旎夜光4 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
沙蒿同学4 天前
我用 Go 搭了一条 AI Agent 流水线:从 1 张商品图到一整套淘宝详情页
前端·javascript·后端
CoderYanger4 天前
A.每日一题:835. 图像重叠
java·开发语言·程序人生·leetcode·面试·职场和发展·学习方法
圣保罗的大教堂4 天前
leetcode 3524. 求出数组的 X 值 I 中等
leetcode
paopaokaka_luck4 天前
智慧社区综合服务小程序(人脸识别、AI问答、Echarts图形化分析)
前端·javascript·spring boot·spring·数据分析·echarts
Tim_104 天前
【LeetCode】338、比特位计数
c++·算法·leetcode
Hilaku4 天前
为什么死磕 1px 的团队,用户体验反而更差?
前端·javascript·程序员