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

相关推荐
aqiu11111116 分钟前
CodeTop按顺序刷题0003:LeetCode 206. 反转链表(迭代法图文详解与动态演示)
算法·leetcode·链表
小羊没烦恼!35 分钟前
T-SQL查询高级—SQL Server索引中的碎片和填充因子
开发语言·前端·javascript·数据库·后端·python·web安全
不会就选b1 小时前
算法日常・每日刷题--<动态规划>29
数据结构·算法·leetcode
小熊在忙fpga1 小时前
N32G430芯片的flash表示
前端·javascript·html
NC 王炸1 小时前
AI 做的便签,换个浏览器就没了?加一个导出按钮,把数据带走
javascript·ai编程·数据备份·localstorage·txt导出
todoitbo1 小时前
本来只想给内网开个口子,Natapp 却多给了一道防护
前端·javascript·vue.js·内网穿透·网络防护·natapp
Chloe.Zz2 小时前
一篇入门Agent
开发语言·前端·javascript
silvamux_2 小时前
4款新模型商务邮件翻译横评:0.98到0.46
android·java·javascript
虚无的纽扣2 小时前
【力扣刷题】第五天:将 x 减到 0 的最小操作数、最大连续1的个数 III
算法·leetcode·职场和发展
定栓2 小时前
Webpack迁到Vite第六节:构建配置详解(vite.config.js)
前端·javascript·webpack