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相关推荐

  1. leetcode-142 环形链表II

    给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 pos 是 - ...

  2. leetcode142 环形链表II

    给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 pos 是 - ...

  3. leetcode142. 环形链表 II(暴力+双链表)

    一:题目 二:思路 1.双指针 快慢指针(快指针一次一个结点,慢指针一次两个结点) 2.如果有环的话,那么快慢指针肯定会相遇 3.那么相遇的地点一定在环中 因为如果没有环的话慢指针是永远追不到快指针的 ...

  4. LeetCode 142. 环形链表 II(Linked List Cycle II)

    142. 环形链表 II 142. Linked List Cycle II 题目描述 给定一个链表,返回链表开始入环的第一个节点.如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整 ...

  5. LeetCode-链表-142. 环形链表 II

    描述 142. 环形链表 II 给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 ...

  6. 142. 环形链表 II golang

    142. 环形链表 II 给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始 ...

  7. LeetCode 142 环形链表 II

    题目描述 给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null.为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开 始). 如果 po ...

  8. 【LeetCode】【HOT】142. 环形链表 II(快慢指针)

    [LeetCode][HOT]142. 环形链表 II 文章目录 [LeetCode][HOT]142. 环形链表 II package hot;class ListNode{int val;List ...

  9. 代码随想录Day04 | LeetCode24. 两两交换链表中的节点、LeetCode19. 删除链表的倒数第N个节点、LeetCode160. 链表相交、LeetCode142. 环形链表Ⅱ

    LeetCode24. 两两交换链表中的节点 力扣题目链接 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点.你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换). 示例 ...

最新文章

  1. matlab图像处理命令(二)
  2. 测试CH340C的功能,制作MicroPython ESP8266,ESP32下载器
  3. Altium Designer旋转PCB、PCB中绕某点旋转
  4. cylance做的机器学习相关材料汇总
  5. 18亿用户、10万条电源线、4200万月活......创业者的底限究竟在哪里?
  6. 什么是千兆光纤收发器?其产品标准具体有哪些?
  7. composer windows安装
  8. linux 挖矿效率_linux 服务器发现了挖矿病毒
  9. 【Oracle】rollup函数
  10. iOS开发:导入字体库
  11. 谷歌AI版“你画我猜”刷屏朋友圈,背后是这样的原理!
  12. Java笔记 - 黑马程序员_06(Stream,字节流,字符流,对象流(序列化流),属性集(Properties))
  13. error while loading shared libraries: libpango_windowing.so: cannot open shared object file: No such
  14. 微型机器学习,会是下一代AI革命吗?
  15. 固态硬盘usb测试软件,固态硬盘检测修复坏道三级OP设置软件HDAT2 5.3 ISO版
  16. pgAdmin4的应用(二)
  17. C语言 输入一个数值,分析是正还是负,并打印出此数
  18. 2022最新网络安全零基础学习路线
  19. 仿菁优网首页动画效果
  20. 戴尔t410服务器cpu型号,戴尔PowerEdge T410 最新第11代服务器

热门文章

  1. 257. 二叉树的所有路径
  2. 【初学】部署架构相关的一些知识
  3. Git生成patch及打patch到源代码
  4. windows7原版iso镜像_一定收藏,常用操作系统原版下载地址整理,Win7 Win10 Deepin...
  5. Django Bootstrap开发笔记01 - 添加简单网页
  6. python操作redis set_Python操作redis学习系列之(集合)set,redis set详解 (六)
  7. Vue路由传参及传参后刷新导致参数消失处理
  8. 轻松搞定JSONP跨域请求
  9. 2016年10个重要的可视化发展
  10. Perl中的正则表达式