当前位置: 首页 > article >正文

leetcode142-环形链表

leetcode 142
在这里插入图片描述

方法1 哈希表查找

时间复杂度:O(n) 空间复杂度:O(n)

首先定义一个哈希map,然后在每次遍历的时候记录当先的指针,如果发现这个指针已经存在的话,那么说明是环的交点,这个方法比较容易理解,但是空间复杂度消耗较多,因为需要将哈希链表中的每个节点都进行存储

var detectCycle = function(head) {
    const map = new Map()
    let cur = head;
    while(cur && !map.has(cur)){
        map.set(cur,0);
        cur = cur.next;
    }
    return cur;
};

方法2 双指针

时间复杂度:O(n) 空间复杂度:O(1)

自己解答本题的时候很自然的利用了哈希来解决,比较容易理解,后面看代码随想录看到双指针法,确实是更加优化的一种方法,将空间复杂度降低到O(1),不过理解起来更困难,大家可以看代码随想录carl大神的解答:环形链表

var detectCycle = function(head) {
    let fast = head,slow = head;
    while(fast?.next?.next){
        fast = fast.next.next;
        slow = slow.next;
        if(slow === fast){ // 相遇
            let nodeA = slow;
            let nodeB = head;
            while(nodeA!==nodeB){
                nodeA = nodeA.next;
                nodeB = nodeB.next;
            }
            return nodeA;
        }
    }
    // 没找到
    return null;
};

http://www.kler.cn/a/511188.html

相关文章:

  • 实力认证 | 海云安入选《信创安全产品及服务购买决策参考》
  • 天机学堂5-XxlJobRedis
  • uni-app vue3 常用页面 组合式api方式
  • 蓝桥杯训练—斐波那契数列
  • 多元线性回归分析
  • Linux下源码编译安装Nginx1.24及服务脚本实战
  • SpringBoot实现定时任务,使用自带的定时任务以及调度框架quartz的配置使用
  • 【2024年华为OD机试】 (C卷,200分)- 反射计数(Java JS PythonC/C++)
  • 【RK3588 docker编译问题】
  • 如何写好ChatGPT的提示词:从入门到专家
  • 【Leetcode 每日一题 - 扩展】70. 爬楼梯
  • C# 实现系统信息监控与获取全解析
  • MySQL 很重要的库 - 信息字典
  • Python脚本:不同Oracle库的表进行读写
  • 新手学习MAML的基础解析
  • uniapp button 去除边框
  • 几个Linux系统安装体验(续): 统信桌面系统
  • 数据库高可用方案-05-备份与恢复
  • Android 10.0 自定义Window窗口层级新增Type类型功能实现
  • 在 C++ 中实现调试日志输出
  • 图像去雾数据集的下载和预处理操作
  • ElasticSearch是什么?基于Lucene的,那么为什么不是直接使用Lucene呢?
  • 如何设置HTTPS站点防御?
  • Java 0115学习总结
  • mysql的主从同步
  • Go-知识 版本演进