leetcode142. 环形链表 II
leetcode142. 环形链表 II
题目描述
链接: leetcode142.
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。
为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。
说明:不允许修改给定的链表。
示例1:
输入:head = [3,2,0,-4], pos = 1
输出:返回索引为 1 的链表节点
解释:链表中有一个环,其尾部连接到第二个节点。
示例2:
输入:head = [1,2], pos = 0
输出:返回索引为 0 的链表节点
解释:链表中有一个环,其尾部连接到第一个节点。
示例 3:
输入:head = [1], pos = -1
输出:返回 null
解释:链表中没有环。
题解
若快慢指针能相遇,让其中任一个指针指向头节点,然后让它俩以相同速度前进,再次相遇时所在的节点位置就是环开始的位置。原因如下:
(1)假设环的长度为r,那么相遇时慢指针走了r,快指针走了2r
(2)假设相遇点距离环的起点为l,则头节点距离环起点为r-l,在环内相遇点距离环的起点的另一半距离也为r-l
(3)所以此时让其中任一个指针指向头节点,然后让它俩以相同速度前进,再次相遇时所在的节点位置就是环开始的位置
- java解法
class ListNode {int val;ListNode next;ListNode(int x) {val = x;next = null;}}public ListNode detectCycle(ListNode head) {ListNode slow = head;ListNode fast = head;while (fast != null && fast.next != null) {fast = fast.next.next;slow = slow.next;if (fast == slow) {break;}}if (fast == null || fast.next == null) {return null;}slow = head;while (fast != slow) {slow = slow.next;fast = fast.next;}return slow;}
- golang解法
type ListNode struct {Val intNext *ListNode
}func detectCycle(head *ListNode) *ListNode {fast, slow := head, headfor fast != nil && fast.Next != nil {fast = fast.Next.Nextslow = slow.Nextif fast == slow {break}}if fast == nil || fast.Next == nil {return nil}slow = headfor fast != slow {fast = fast.Nextslow = slow.Next}return slow
}
leetcode142. 环形链表 II相关推荐
- leetcode-142 环形链表II
给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 pos 是 - ...
- leetcode142 环形链表II
给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 pos 是 - ...
- leetcode142. 环形链表 II(暴力+双链表)
一:题目 二:思路 1.双指针 快慢指针(快指针一次一个结点,慢指针一次两个结点) 2.如果有环的话,那么快慢指针肯定会相遇 3.那么相遇的地点一定在环中 因为如果没有环的话慢指针是永远追不到快指针的 ...
- LeetCode 142. 环形链表 II(Linked List Cycle II)
142. 环形链表 II 142. Linked List Cycle II 题目描述 给定一个链表,返回链表开始入环的第一个节点.如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整 ...
- LeetCode-链表-142. 环形链表 II
描述 142. 环形链表 II 给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 ...
- 142. 环形链表 II golang
142. 环形链表 II 给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始 ...
- LeetCode 142 环形链表 II
题目描述 给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null.为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开 始). 如果 po ...
- 【LeetCode】【HOT】142. 环形链表 II(快慢指针)
[LeetCode][HOT]142. 环形链表 II 文章目录 [LeetCode][HOT]142. 环形链表 II package hot;class ListNode{int val;List ...
- 代码随想录Day04 | LeetCode24. 两两交换链表中的节点、LeetCode19. 删除链表的倒数第N个节点、LeetCode160. 链表相交、LeetCode142. 环形链表Ⅱ
LeetCode24. 两两交换链表中的节点 力扣题目链接 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点.你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换). 示例 ...
最新文章
- matlab图像处理命令(二)
- 测试CH340C的功能,制作MicroPython ESP8266,ESP32下载器
- Altium Designer旋转PCB、PCB中绕某点旋转
- cylance做的机器学习相关材料汇总
- 18亿用户、10万条电源线、4200万月活......创业者的底限究竟在哪里?
- 什么是千兆光纤收发器?其产品标准具体有哪些?
- composer windows安装
- linux 挖矿效率_linux 服务器发现了挖矿病毒
- 【Oracle】rollup函数
- iOS开发:导入字体库
- 谷歌AI版“你画我猜”刷屏朋友圈,背后是这样的原理!
- Java笔记 - 黑马程序员_06(Stream,字节流,字符流,对象流(序列化流),属性集(Properties))
- error while loading shared libraries: libpango_windowing.so: cannot open shared object file: No such
- 微型机器学习,会是下一代AI革命吗?
- 固态硬盘usb测试软件,固态硬盘检测修复坏道三级OP设置软件HDAT2 5.3 ISO版
- pgAdmin4的应用(二)
- C语言 输入一个数值,分析是正还是负,并打印出此数
- 2022最新网络安全零基础学习路线
- 仿菁优网首页动画效果
- 戴尔t410服务器cpu型号,戴尔PowerEdge T410 最新第11代服务器
热门文章
- 257. 二叉树的所有路径
- 【初学】部署架构相关的一些知识
- Git生成patch及打patch到源代码
- windows7原版iso镜像_一定收藏,常用操作系统原版下载地址整理,Win7 Win10 Deepin...
- Django Bootstrap开发笔记01 - 添加简单网页
- python操作redis set_Python操作redis学习系列之(集合)set,redis set详解 (六)
- Vue路由传参及传参后刷新导致参数消失处理
- 轻松搞定JSONP跨域请求
- 2016年10个重要的可视化发展
- Perl中的正则表达式