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

力扣面试150(46/150)

8.1 141. 环形链表

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

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。

如果链表中存在环 ,则返回 true 。 否则,返回 false

关于js中的链表:

不同于new Array()new Set()new Map()等数据结构,目前js官方还没有为我们提供一个直接的链表API实现。不过我们可以通过对象的方式去模拟出一个链表

链表里面有两个重要的数据:data和next

/ 链表对象化,便于理解
const obj = {data: 1,next: {data: 2,next: {data: 3,next: null,},},
};

next指向的是下一个数据

我的思路:

快慢指针:slow,fast

如果是环的话,fast走两步,slow走一步,总有一天会相遇的

我的代码:

var hasCycle = function(head) {let slow = fast = head;while(fast && fast.next){slow = slow.next;fast = fast.next.next;if(slow === fast){return true;}}return false;
};

总结:这段代码通过快慢指针法检测链表是否有环。初始化两个指针都指向头节点,慢指针每次走一步,快指针每次走两步。如果链表存在环,快指针最终会追上慢指针并相遇;如果快指针到达链表末尾,则说明无环。这种方法高效且空间复杂度为O(1)。

http://www.dtcms.com/a/310058.html

相关文章:

  • Spring AI MCP:解锁大模型应用开发新姿势
  • Idea快捷键
  • 从入仓到结算全自动化:易境通如何重构散货拼柜业务流程?
  • SpringBoot3.x入门到精通系列:1.3 创建第一个SpringBoot 3.x应用
  • LeetCode 刷题【24. 两两交换链表中的节点、25. K 个一组翻转链表】
  • Ubuntu 开启wifi 5G 热点
  • 数字孪生城市:以虚实映射为起点,开启城市全要素数字化转型新纪元
  • Docker学习其二(容器卷,Docker网络,Compose)
  • FEVER数据集:事实验证任务的大规模基准与评估框架
  • 如何安全管理SSH密钥以防止服务器被入侵
  • Wisdom SSH开启高效管理服务器的大门
  • 企业WEB应用服务器TOMCAT
  • 将Varjo XR技术融入战斗机训练模拟器,有效提升模拟训练沉浸感与效率
  • python简单操作达梦数据库
  • 深入浅出理解WaitForSingleObject:Windows同步编程核心函数详解
  • 蘑兔 AI 音乐:你的专属音乐创作搭子
  • python基础:XPath解析网页数据:xpath简介、xpath语法、xpath节点、节点关系、xpath练习实战
  • 蓝桥杯----DA、AD
  • 3DEXPERIENCE结构树中的类型关系图谱
  • Linux(CentOS 7.9) 卸载、安装MySql 5.7详细步骤教程,包括密码设置、字符集设置等
  • 机器学习②【字典特征提取、文本特征处理(TF-IDF)、数据标准化与归一化、特征降维】
  • 在纯servlet项目中,使用@WebFilter定义了多个filter,如何设置filter的优先级
  • 力扣刷题日常(9-10)(待完善)
  • Python中.format()使用详解和格式化控制台日志场景示例
  • 【C语言入门级教学】字符指针变量
  • 逻辑回归算法中的一些问题
  • React核心:组件化与虚拟DOM揭秘
  • 《React Router深解:复杂路由场景下的性能优化与导航流畅性构建》
  • Rust → WebAssembly 的性能剖析全指南
  • NDI开发指南