JS算法-环形链表

简介: JS算法-环形链表

题目


给你一个链表的头节点 head ,判断链表中是否有环。

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


题解


第一种


首先,若链表头节点head为空,直接返回false,表示不存在环。接下来定义一个储存节点的WeakSet数据结构,用于存储已经遍历的节点。然后定义一个flag变量赋值为true,作为最终的返回结果。接着进入一个while循环,循环条件为true,也就是一直进行循环,直到break语句触发。在while循环中,首先判断当前节点是否已经被WeakSet存储过,如果是,说明链表存在环,直接break退出循环;否则,将当前节点加入WeakSet中。接着判断当前节点的下一个节点是否为空,如果为空,说明链表已经遍历到了末尾,将flag变量改成false,跳出循环。如果下一个节点不为空,就将当前节点的下一个节点赋值给next,继续循环。最后,返回flag变量,表示链表是否存在环。

var hasCycle = function(head) {
    if (!head) return false
    let next = head
    const weakset = new WeakSet()
    let flag = true
    while(true) {
        if (weakset.has(next)) break;
        weakset.add(next)
        if (!next.next) {
            flag = false
            break;
        }
        next = next.next
    }
    return flag
};


第二种


我们这里使用快慢指针的方式检测链表是否有环。先判断链表是否为空或者只有一个节点,如果是,则一定没有环。接着定义三个指针,i、j、k,i每次走一步,j每次走两步,k每次也走两步。如果链表存在环,那么i与j一定会相遇,此时将k初始化为head,然后k与i、j同步走,当k与i(或j)相遇时,就证明链表有环。如果k在走的过程中发现链表末尾,也就是k.next或k.next.next为null,则证明链表是一个无环链表,直接返回false即可。最终,如果循环结束了,也没有发现链表存在环,则返回false。

   var hasCycle = function (head) {
      if (head === null || head.next === null) {
          return false
      }
      let i = head.next, j = head, k = head
      while (i !== null) {
          if (k.next === null || k.next.next === null) {
              return false
          }
          k = k.next.next
          if (k === i || k === j) {
              return true
          }
          i = i.next
          j = j.next
      }
      return false
  }
相关文章
|
3天前
|
JavaScript 算法 安全
深度剖析:共享文件怎么设置密码和权限的 Node.js 进阶算法
在数字化时代,共享文件的安全性至关重要。本文聚焦Node.js环境,介绍如何通过JavaScript对象字面量构建数据结构管理文件安全信息,包括使用`bcryptjs`库加密密码和权限校验算法,确保高效且安全的文件共享。通过实例代码展示加密与权限验证过程,帮助各行业实现严格的信息资产管理与协作。
|
18天前
|
存储 监控 算法
局域网网络管控里 Node.js 红黑树算法的绝妙运用
在数字化办公中,局域网网络管控至关重要。红黑树作为一种自平衡二叉搜索树,凭借其高效的数据管理和平衡机制,在局域网设备状态管理中大放异彩。通过Node.js实现红黑树算法,可快速插入、查找和更新设备信息(如IP地址、带宽等),确保网络管理员实时监控和优化网络资源,提升局域网的稳定性和安全性。未来,随着技术融合,红黑树将在网络管控中持续进化,助力构建高效、安全的局域网络生态。
41 9
|
24天前
|
监控 算法 JavaScript
基于 Node.js Socket 算法搭建局域网屏幕监控系统
在数字化办公环境中,局域网屏幕监控系统至关重要。基于Node.js的Socket算法实现高效、稳定的实时屏幕数据传输,助力企业保障信息安全、监督工作状态和远程技术支持。通过Socket建立监控端与被监控端的数据桥梁,确保实时画面呈现。实际部署需合理分配带宽并加密传输,确保信息安全。企业在使用时应权衡利弊,遵循法规,保障员工权益。
39 7
|
22天前
|
存储 监控 JavaScript
深度探秘:运用 Node.js 哈希表算法剖析员工工作时间玩游戏现象
在现代企业运营中,确保员工工作时间高效专注至关重要。为应对员工工作时间玩游戏的问题,本文聚焦Node.js环境下的哈希表算法,展示其如何通过快速查找和高效记录员工游戏行为,帮助企业精准监测与分析,遏制此类现象。哈希表以IP地址等为键,存储游戏网址、时长等信息,结合冲突处理与动态更新机制,确保数据完整性和时效性,助力企业管理层优化工作效率。
29 3
|
2月前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
2月前
|
存储 Web App开发 算法
2024重生之回溯数据结构与算法系列学习之单双链表【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构之单双链表按位、值查找;[前后]插入;删除指定节点;求表长、静态链表等代码及具体思路详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
3月前
|
存储 缓存 算法
经典算法之链表篇(三)
经典算法之链表篇(三)
|
3月前
|
算法
经典算法之链表篇(二)
经典算法之链表篇(二)
|
8天前
|
算法 数据安全/隐私保护 计算机视觉
基于Retinex算法的图像去雾matlab仿真
本项目展示了基于Retinex算法的图像去雾技术。完整程序运行效果无水印,使用Matlab2022a开发。核心代码包含详细中文注释和操作步骤视频。Retinex理论由Edwin Land提出,旨在分离图像的光照和反射分量,增强图像对比度、颜色和细节,尤其在雾天条件下表现优异,有效解决图像去雾问题。
|
8天前
|
算法 数据可视化 安全
基于DWA优化算法的机器人路径规划matlab仿真
本项目基于DWA优化算法实现机器人路径规划的MATLAB仿真,适用于动态环境下的自主导航。使用MATLAB2022A版本运行,展示路径规划和预测结果。核心代码通过散点图和轨迹图可视化路径点及预测路径。DWA算法通过定义速度空间、采样候选动作并评估其优劣(目标方向性、障碍物距离、速度一致性),实时调整机器人运动参数,确保安全避障并接近目标。
104 68