JS算法-环形链表2

简介: JS算法-环形链表2

题目


给定一个链表的头节点  head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null

输入: head = [3,2,0,-4], pos = 1
输出: 返回索引为 1 的链表节点
解释: 链表中有一个环,其尾部连接到第二个节点。


题解


第一种


我们这里采用的是快慢指针的方法,假设有两个指针:一个指针slow每次走一步,另一个指针fast每次走两步。如果链表中存在环,那么经过一些循环之后,快指针总会追上慢指针。在此期间,如果慢指针到达链表末尾,那么意味着链表无环。首先,如果链表为空或只有一个节点,就可以直接返回null。然后,设定fast和slow指针初始位置都为head。在while循环中,每次快指针fast向前移动两个位置,慢指针slow向前移动一个位置。如果存在环,最终快指针一定会追上慢指针并相遇。如果快指针和慢指针没有相遇,就代表链表中不存在环,直接返回null。接着,将慢指针slow重新指向head,然后再次进行循环,每次将快指针和慢指针都向前移动一个位置,直到它们相遇,相遇点就是链表中的环的连接点。最后返回该连接点。

var detectCycle = function(head) {
      if(!head || !head.next) return null;
      let fast = head;
      let slow = head;
      while(fast && fast.next){
          fast = fast.next.next;
          slow = slow.next;
          if(fast == slow){
              break;
          }
      }
      if(fast != slow){
          return null;
      }
      slow = head;
      while(slow != fast){
          fast = fast.next;
          slow = slow.next;
      }
      return slow;
  };


第二种


判断链表头结点是否为空或者链表只有一个结点,如果是则直接返回空。利用Set数据结构,创建一个保存链表结点的集合nodeSet,同时定义一个变量length用来保存nodeSet集合的大小。在while循环中,遍历链表,如果nodeSet不存在当前结点则把当前结点加入nodeSet集合中,同时将length设为nodeSet集合的大小,如果当前结点已经存在于nodeSet集合中,则说明链表有环,返回当前结点。如果遍历完整个链表都没有发现有环的结点,则返回null。

  var detectCycle = function(head) {
      var result = null;
      if(head === null || head.next === null){
          return result;
      }
      var nodeSet = new Set();
      var length = 0;
      while(head !== null){
          length = nodeSet.size;
          nodeSet.add(head);
          if(length === nodeSet.size){
              result = head;
              break;
          }
          head = head.next;
      }
      return result;
  };
相关文章
|
3天前
|
存储 监控 算法
局域网网络管控里 Node.js 红黑树算法的绝妙运用
在数字化办公中,局域网网络管控至关重要。红黑树作为一种自平衡二叉搜索树,凭借其高效的数据管理和平衡机制,在局域网设备状态管理中大放异彩。通过Node.js实现红黑树算法,可快速插入、查找和更新设备信息(如IP地址、带宽等),确保网络管理员实时监控和优化网络资源,提升局域网的稳定性和安全性。未来,随着技术融合,红黑树将在网络管控中持续进化,助力构建高效、安全的局域网络生态。
24 9
|
9天前
|
监控 算法 JavaScript
基于 Node.js Socket 算法搭建局域网屏幕监控系统
在数字化办公环境中,局域网屏幕监控系统至关重要。基于Node.js的Socket算法实现高效、稳定的实时屏幕数据传输,助力企业保障信息安全、监督工作状态和远程技术支持。通过Socket建立监控端与被监控端的数据桥梁,确保实时画面呈现。实际部署需合理分配带宽并加密传输,确保信息安全。企业在使用时应权衡利弊,遵循法规,保障员工权益。
23 7
|
7天前
|
存储 监控 JavaScript
深度探秘:运用 Node.js 哈希表算法剖析员工工作时间玩游戏现象
在现代企业运营中,确保员工工作时间高效专注至关重要。为应对员工工作时间玩游戏的问题,本文聚焦Node.js环境下的哈希表算法,展示其如何通过快速查找和高效记录员工游戏行为,帮助企业精准监测与分析,遏制此类现象。哈希表以IP地址等为键,存储游戏网址、时长等信息,结合冲突处理与动态更新机制,确保数据完整性和时效性,助力企业管理层优化工作效率。
21 3
|
2月前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
2月前
|
存储 Web App开发 算法
2024重生之回溯数据结构与算法系列学习之单双链表【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构之单双链表按位、值查找;[前后]插入;删除指定节点;求表长、静态链表等代码及具体思路详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
3月前
|
存储 缓存 算法
经典算法之链表篇(三)
经典算法之链表篇(三)
|
3月前
|
算法
经典算法之链表篇(二)
经典算法之链表篇(二)
|
3月前
|
算法 索引
经典算法之链表篇
经典算法之链表篇
|
3月前
|
算法
❤️算法笔记❤️-(每日一刷-83、删除排序链表中的重复项)
❤️算法笔记❤️-(每日一刷-83、删除排序链表中的重复项)
37 0
|
3天前
|
算法 数据安全/隐私保护
室内障碍物射线追踪算法matlab模拟仿真
### 简介 本项目展示了室内障碍物射线追踪算法在无线通信中的应用。通过Matlab 2022a实现,包含完整程序运行效果(无水印),支持增加发射点和室内墙壁设置。核心代码配有详细中文注释及操作视频。该算法基于几何光学原理,模拟信号在复杂室内环境中的传播路径与强度,涵盖场景建模、射线发射、传播及接收点场强计算等步骤,为无线网络规划提供重要依据。
下一篇
开通oss服务