循环链表找循环开始的节点:

//设置快慢指针 快指针一次走两个 慢指针一次走一个 第一次相遇后将快指针重新放到头部

//快指针一次走一个 慢指针一次走一个 第二次相遇的位置就是环开始的位置

题目

142. 环形链表 II

难度中等997收藏分享切换为英文接收动态反馈

给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null

为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。

说明:不允许修改给定的链表。

进阶:

  • 你是否可以使用 O(1) 空间解决此题?

示例 1:

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

示例 2:

输入:head = [1,2], pos = 0
输出:返回索引为 0 的链表节点
解释:链表中有一个环,其尾部连接到第一个节点。

示例 3:

输入:head = [1], pos = -1
输出:返回 null
解释:链表中没有环。

提示:

  • 链表中节点的数目范围在范围 [0, 104] 内
  • -105 <= Node.val <= 105
  • pos 的值为 -1 或者链表中的一个有效索引

C++代码

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode *detectCycle(ListNode *head) {//设置快慢指针 快指针一次走两个 慢指针一次走一个 第一次相遇后将快指针重新放到头部 //快指针一次走一个 慢指针一次走一个 第二次相遇的位置就是环开始的位置ListNode* fast = head;ListNode* last = head;if(!fast || !fast->next) return NULL;while(true){fast = fast->next->next;last = last->next;if(fast == last){fast = head;break;}if(!fast || !fast->next) return NULL;}while(fast != last){fast = fast->next;last = last->next;}return fast;}
};

快慢指针寻找循环节点相关推荐

  1. c 链表之 快慢指针 查找循环节点(转)

    上面分析了 根据这张图 推倒出 数学公式. 刚接触 不能一下弄明白.下面结合上面文章的分析.仔细推倒一下 , 一般设置 快指针 速度是 慢指针的2倍.及 快指针每次遍历两个指针, 慢指针每次遍历1个指 ...

  2. 证明利用快慢指针寻找有环单链表中环的起点算法

    问题:给定一个有环单链表,找到链表中环的起点,也就是说,找到下图中的单链表中Join点: (本图来源于http://www.cnblogs.com/xudong-bupt/p/3667729.html ...

  3. 利用快慢指针判断循环

    今天在leetcode刷题时,碰到一个好玩的简单题 其实这道题的题干非常简单易懂,但是涉及到了一个无限循环的可能. 从数学上来说,如何证明它是无限循环而不是无限不循环也许是一个有挑战性的问题,但是这里 ...

  4. 快慢指针(LeetCode寻找重复数),弗洛伊德的乌龟和兔子

    写此篇博客在于总结,记忆之用,欢迎评论补充. 弗洛伊德的乌龟和兔子,即快慢指针. 对于LeetCode287题,寻找重复数,题目如下: 给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 ...

  5. 快慢指针追逐法寻找单链表中环的起点

    寻找单链表环的起点 题目 解决思路 代码 说明 题目 给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null.如下图中数字2对应的节点为环的第一个节点: 输入:head = [3 ...

  6. 双指针算法之快慢指针(二):力扣【寻找链表的第N个点】leetcode-876、19

    双指针算法之快慢指针(二):力扣[寻找链表的第N个点]leetcode-876.19 看完本文,可以去解决力扣的 867 题和 19 题 以往参考:双指针算法之快慢指针(一):力扣[判断链表是否有环] ...

  7. [Leedcode][JAVA][第287题][寻找重复数][HashSet][二分查找][快慢指针]

    [问题描述][中等] 给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数.假设只有一个重复的整数,找出这个重复的数.输入: ...

  8. LeetCode 2095. 删除链表的中间节点(快慢指针)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个链表的头节点 head .删除 链表的 中间节点 ,并返回修改后的链表的头节点 head . 长度为 n 链表的中间节点是从头数起第 ⌊n / 2 ...

  9. LeetCode 1721. 交换链表中的节点(快慢指针)

    文章目录 1. 题目 2. 解题 1. 题目 给你链表的头节点 head 和一个整数 k . 交换 链表正数第 k 个节点和倒数第 k 个节点的值后,返回链表的头节点(链表 从 1 开始索引). 示例 ...

最新文章

  1. Python 之 matplotlib (六)tick能见度
  2. 漫话:如何给女朋友解释为什么计算机中 0.2 + 0.1 不等于 0.3 ?
  3. C++设计模式--状态模式(state)
  4. 渗透测试学习 十一、 其他注入漏洞汇总
  5. Spring Boot-热部署和Debugger使用(三)
  6. 我的MySQL数据库学习笔记
  7. JavaScript学习(七十六)—this的指向问题
  8. 事务(进程 ID )与另一个进程已被死锁在 lock 资源上,且该事务已被选作死锁牺牲品。请重新运行该事务...
  9. 2021-2027中国游戏开发工具市场现状及未来发展趋势
  10. JDK 中需要掌握的常用类库
  11. 茴字有四种写法,HTAP呢?
  12. 阿里云禁止root用户直接登录的解决办法
  13. 征途服务器文件,征途端游服务器地址
  14. Jeff Atwood倾情推荐——程序员必读之书 (zz)
  15. 解决百度上传WebUploader在IE浏览器下点击无反应的问题
  16. 键盘按键名称及HID扫描码及VK虚拟键码对照表
  17. 想不到验证码背后的故事这么有意思
  18. 深度学习 学习笔记总结
  19. 库存转换是什么意思_什么是库存?
  20. 【调剂】苏州科技大学电子与信息工程学院2021年硕士研究生招生第二批调剂信息公告...

热门文章

  1. LUA GC 简单测试
  2. AC日记——魔方 洛谷 P2007
  3. 走进AngularJs(六) 服务
  4. 修改Bootstrap的一些默认样式
  5. SpringMvc 集成 shiro 实现权限角色管理-maven
  6. Linux 搭建Sphinx 全文检索引擎
  7. Sencha-概念-Events(事件)(官网文档翻译10)
  8. 大家说火箭进决赛的机会有多大?
  9. 非技术(一)——从最近的股票市场看到的
  10. C++统计难题hdu1251