【JS】环形链表怎么找入口?

思路

判断是否有环:定义快慢指针,慢指针(slow)走一步,快指针(fast)走两步。

  • 无环:快指针最终会到达链表的末尾(即fast.nextnull),永远不可能相遇
  • 有环:当slow进入环中,fast开始在环中追赶slow,两指针每一次移动,对于slow来说,fast都在一步一步靠近slow。当slow走一圈,fast已经走完两圈(fast是slow速度的两倍),由于fast是逐步靠近slow,所以两指针必然在slow进环的第一圈内相遇,相遇即有环

寻找环的入口:链表head到入口点距离=两指针相遇点到入口点距离

  • 当slow到环入口时,fast已经在环内走了N>=1圈,设slow到入口点距离X,入口点到相遇点距离Y,环中相遇点到入口点距离Z(顺时针),则相遇时两指针走的节点分别为:
  • slow:X+Y
  • fast:X+Y+N*(Y+Z)
  • 步数:slow : fast = 1 : 2
  • 则在相遇点可以推出公式:2(X+Y)=X+Y+N*(Y+Z)
  • ==>(X+Y)=N*(Y+Z)
  • ==>  X=N*(Y+Z)-Y
  • ==> X=(N-1)Y+N*Z  当N=1时,X=Z

环的性质:在链表中,如果存在环,那么从链表头部到环入口的距离等于环入口到快慢指针相遇点的距离。

题目 

示例代码

var detectCycle = function (head) {// 如果头节点为空或者头节点的下一个节点为空,说明链表中没有环if (!head || !head.next) return null;// 初始化两个指针,slow和fast,都指向头节点let slow = head, fast = head;// 使用while循环进行快慢指针的移动,直到fast指针不能再移动while (fast && fast.next) {// 移动fast指针,一次走两步fast = fast.next.next;// 移动slow指针,一次走一步slow = slow.next;// 如果fast指针追上了slow指针,说明链表中有环if (fast === slow) {// 指针index1 指向头结点// 指针index2 指向相遇点let index1 = head, index2 = fast;// 使用while循环移动index1和index2,直到它们相遇// 这一步是为了找到环的起始节点while (index1 !== index2) {// 两指针没遇到就继续走index1 = index1.next;index2 = index2.next;}// 当index1和index2相遇时,返回index1,即环的起始节点return index1;}}// 如果没有检测到环,返回nullreturn null;
};

思路及图片借鉴:@代码随想录 

欢迎指正!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1559207.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

C++ 二叉搜索树转换为双向链表

描述 输入一棵二叉搜索树&#xff0c;将该二叉搜索树转换成一个排序的双向链表: 代码 #include <iostream> #include <string> #include <optional>struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x): val(x), left(…

陈零九全新单曲《也曾想走进你的心底》 揭露爱而不得的情感遗憾

图片提供&#xff1a;种子音乐 “创作男神”陈零九于10月9日推出充满深情的全新创作单曲《也曾想走进你的心底》&#xff0c;这首歌再次延续他招牌的“九式情歌”风格&#xff0c;展现其创作魅力。歌曲以一段“爱而不得”的感情故事为主线&#xff0c;深入探讨人们在爱情中的复…

项目启动 | 盘古信息赋能奥尼视讯数字化转型升级,实现全面数智化发展

随着信息技术的飞速发展与全球市场竞争的日益激烈&#xff0c;传统制造业正面临生存和发展的危机&#xff0c;制造企业为谋求发展&#xff0c;纷纷开启数字化转型之路&#xff0c;深度融入数字技术&#xff0c;实现生产流程的智能化、管理模式的精细化以及产品服务的个性化&…

科普|网络准入控制系统是什么?2024年好用的网络准入控制系统推荐!

在宁波的传统习俗中&#xff0c;有一个有趣的谚语故事——“阿旺炒年糕”。 据说&#xff0c;宁波的男子名字中多“旺”&#xff0c;凡名字中有“旺”者&#xff0c;小名就被叫作“阿旺”。炒年糕须用慢火&#xff0c;但有一位不懂家务的男子心急&#xff0c;用旺火炒年糕&…

LSTM(长短时记忆网络)

一、引言 在处理序列数据时&#xff0c;循环神经网络&#xff08;RNN&#xff09;虽然能够处理序列数据并保留历史信息&#xff0c;但在实践中发现它对于捕捉长时间依赖关系的能力有限&#xff0c;尤其是在训练过程中容易遇到梯度消失或梯度爆炸的问题。为了解决这些问题&…

组装首页:其他组件html、css移入JS中再引入首页

组装首页 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>组装首页</title><style>* …

【计算机方向】IEEE二区宝刊,IF=9.6,2个月秒速接受,备受国人吹捧!

期刊解析 01 期刊信息✦ 期刊名称&#xff1a;IEEE Transactions on Affective Computing 出版商&#xff1a;Institute of Electrical and Electronics Engineers Inc. ISSN&#xff1a;1949-3045 …

重头开始嵌入式第四十七天(硬件 ARM裸机开发 RS232 RS4885 IIC)

目录 一.什么是RS232&#xff1f; 1. 历史背景&#xff1a; 2. 电气特性&#xff1a; 3. 连接器类型&#xff1a; 4. 通信特点&#xff1a; 5. 应用场景&#xff1a; 二.什么是RS485&#xff1f; 1. 电气特性&#xff1a; 2. 通信模式&#xff1a; 3. 传输距离与速率&…

扫描电镜是用来测什么的?

扫描电镜是一种用于对样品进行微观尺度形貌观测和分析的仪器。它能够提供高分辨率的图像&#xff0c;帮助科学家和工程师了解样品的微观结构和特性。 一、扫描电镜的一般测量功能 微观形貌观测 扫描电镜可以清晰地观察到样品表面的微观形貌&#xff0c;如颗粒的形状、大小、…

GC9113:电子锁领域的革新力量

在现代社会&#xff0c;安全与便捷成为人们对生活品质的重要追求。电子锁作为保障家庭和商业安全的关键设备&#xff0c;不断经历着技术的革新与升级。而 GC9113 的出现&#xff0c;为电子锁领域带来了全新的替代选择。 GC9113 以其卓越的性能和独特的优势&#xff0c;在电子锁…

【嵌入式软件-STM32】STM32简介

目录 一、STM32定义 二、STM32用途 三、STM32特点 四、STM32 四个系列 五、了解ARM 六、芯片解释 七、片上资源 八、命名规则 九、系统结构 内核 Flash DMA 外设种类和分布 十、引脚定义 类型 名称 引脚 十一、启动配置 十二、STM32最小系统电路 STM32及供电 供电引脚 滤波电容…

深度学习:循环神经网络RNN

目录 一、神经网络的历程 1.传统神经网络存在的问题 2.提出一种新的神经网络 二、RNN基本结构 1.RNN基本结构 2.RNN的独特结构 3.RNN的局限性 一、神经网络的历程 1.传统神经网络存在的问题 无法训练出具有顺序的数据。模型搭建时没有考虑数据上下之间的关系。因为传统…

十年网络安全工程师谈学习网络安全的正确顺序

当今数字化时代&#xff0c;网络安全行业如守护数字世界的坚固堡垒&#xff0c;其重要性愈发凸显。随着信息技术的迅猛发展&#xff0c;我们的生活、工作、社交等方方面面都与网络紧密相连&#xff0c;从个人隐私信息到企业核心数据&#xff0c;再到国家关键基础设施乃至全球互…

什么是Cookie 它有什么作用 及如何使用Session-Cookie方案进行身份验证 总结

Cookie 和 Session 都是用来跟踪浏览器用户身份的会话方式&#xff0c;但是两者的应用场景不太一样。 维基百科是这样定义 Cookie 的&#xff1a; Cookies 是某些网站为了辨别用户身份而储存在用户本地终端上的数据&#xff08;通常经过加密&#xff09;。 简单来说&#xff1…

实战千问2大模型第五天——VLLM 运行 Qwen2-VL-7B(多模态)

一、简介 VLLM 是一种高效的深度学习推理库&#xff0c;通过PagedAttention算法有效管理大语言模型的注意力内存&#xff0c;其特点包括24倍的吞吐提升和3.5倍的TGI性能&#xff0c;无需修改模型结构&#xff0c;专门设计用于加速大规模语言模型&#xff08;LLM&#xff09;的…

网站排名,让网站快速有排名的几个方法

要让网站快速获得并提升排名&#xff0c;需要综合运用一系列专业策略和技术&#xff0c;这些策略涵盖了内容优化、技术调整、外链建设、用户体验提升等多个方面。以下是让网站快速有排名的几个方法&#xff1a; 1.内容为王&#xff1a;创造高质量、有价值的内容 -深入…

The Android SDK location cannot be at the filesystem root

win11&#xff0c; 安装启动完Android Studio后&#xff0c;一直显示 The Android SDK location cannot be at the filesystem root因此需要下载SDK包&#xff0c;必须开启代理。 开启代理后&#xff0c;在System下开启自动检测代理&#xff0c;如图 重启Android Studio&a…

Ubuntu双卡训练过程中电脑总是突然重启【解决方法】

本来以为是温度过热造成的&#xff0c;发现不是&#xff0c;因为在重启的瞬间&#xff0c;gpu温度并没有特别高。 参见视频如下&#xff1a; 双卡训练过程中gpu温度监测 然后尝试了另一种方法&#xff1a; 限制gpu显卡的功率 具体操作如下&#xff1a; 先检查当前gpu功率限…

[论文阅读] DVQA: Understanding Data Visualizations via Question Answering

原文链接&#xff1a;http://arxiv.org/abs/1801.08163 启发&#xff1a;没太读懂这篇论文&#xff0c;暂时能理解的就是本文提出了一个专门针对条形图问答的数据集DVQA以及一个端到端模型SANDY&#xff0c;模型有两个版本&#xff0c;Oracle和OCR。主要解决的问题是固定词表无…

IPguard vs Ping32:防泄密软件的巅峰对决,哪款是你的理想选择

在当今这个数字化时代&#xff0c;数据安全已成为企业不可忽视的重要议题。为了有效防范数据泄露风险&#xff0c;众多企业开始寻求专业的防泄密软件。IPguard与Ping32作为两款备受关注的防泄密软件&#xff0c;各自以其卓越的性能和独特的功能&#xff0c;赢得了广大用户的青睐…