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 分钟前
MessageChannel是什么,有什么使用场景?
前端·javascript
人无远虑必有近忧!29 分钟前
fetch请求图片报跨域
前端·javascript
风筝在晴天搁浅40 分钟前
LeetCode CodeTop 82.删除排序链表中的重复元素Ⅱ
算法·leetcode·链表
不会就选b1 小时前
数据结构之链表OJ题(下)
数据结构·链表
chushiyunen1 小时前
vue export default
前端·javascript·vue.js
洛水水1 小时前
【力扣100题】84.字符串解码
算法·leetcode·职场和发展
zzqssliu1 小时前
Next.js图片自适应压缩:跨境站点图片加载提速代码方案
linux·javascript·ubuntu
洛水水1 小时前
【力扣100题】89.下一个排列
数据结构·算法·leetcode
洛水水1 小时前
【力扣100题】90.寻找重复数
算法·leetcode·职场和发展
alphaTao1 小时前
LeetCode 每日一题 2026/6/8-2026/6/14
算法·leetcode