题目

给定一个链表,返回链表开始入环的第一个节点。 从链表的头节点开始沿着 next 指针进入环的第一个节点为环的入口节点。如果链表无环,则返回 null。

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

  • 示例 1:

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

  • 示例 2:

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

题解

  • 思路,快慢指针,如果快指针追上慢指针,证明有环
  • 数学推导
    首先,如果有环,快指针一定能追上慢指针,假设:
    (1)从头节点到入换点距离为a;
    (2)从入环点到相遇点距离为b;
    (3)相遇点到头节点距离为c;

设快指针追上慢指针时已走了n圈,则有等式
a + (b+c)n + b = 2(a+b);==>a + (n+1)b + nc = 2(a+b); ==> a = c + (n-1)(b+c);

  • 由上面等式可知,c的距离等于a的距离
ListNode *detectCycle(ListNode *head) {//快慢指针 + 数学推理bool cycle_exist = false;ListNode* slow = head, *fast = head, *tmp = head;while(fast != nullptr){if(cycle_exist){// 快指针追上慢指针后,慢指针到入环点的距离 与 头节点到入环点距离相等if(slow == tmp)return slow;slow = slow->next;tmp = tmp->next;continue;}// 快指针追上慢指针,证明有环if(fast->next) fast = fast->next->next;else break;slow = slow->next;if(slow == fast) cycle_exist = true;}return nullptr;}

剑指 Offer II 022. 链表中环的入口节点(力扣剑指Offer专项突击版——链表2)相关推荐

  1. 剑指offer-面试题23:链表中环的入口节点 快慢指针+双指针

    题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null.如图所示,节点3是链表中环的入口节点 本题的解决分为两步:(1)确定链表中是否有环(2)如果有环,确定环的入口节点. ...

  2. 牛客题霸 [链表中环的入口节点] C++题解/答案

    牛客题霸 [链表中环的入口节点] C++题解/答案 题目描述 对于一个给定的链表,返回环的入口节点,如果没有环,返回null 拓展: 你能给出不利用额外空间的解法么? 题解: 判断环有个很巧妙的方法, ...

  3. 【Java】剑指 Offer II 022. 链表中环的入口节点

    题目 :给定一个链表,返回链表开始入环的第一个节点. 从链表的头节点开始沿着 next 指针进入环的第一个节点为环的入口节点.如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 p ...

  4. 《剑指offer》链表中环的入口节点

    题目:一个链表中包含环,请找出该链表的环的入口结点. 解析:思想是用list存储从头开始遍历的链表节点,如果list集合不存在该节点,就把该节点添加进list,然后继续遍历下一个.当list中包含当前 ...

  5. 《剑指Offer》23:链表中环的入口节点

    题目 若一个链表中包含环,如何找出的入口结点?如下图链表中,环的入口节点的节点3. 分析 一快(移两节点)一慢(移一节点)两指针判断链表是否存在环. 算出环有几个节点(上一步的两指针可知是在环中,让慢 ...

  6. 常考数据结构和算法:链表中环的入口节点

    题目描述 对于一个给定的链表,返回环的入口节点,如果没有环,返回null. 步骤:  <1> 定义两个指针p1和p2,在初始化时都指向链表的头节点.  <2> 如果链表中的环有 ...

  7. [链表]---链表中环的入口节点

    题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 思路 首先要确定这个链表中包含环. 然后找到环的长度,根据环的长度找到环的入口节点. 先上结论,然后再证明: 结论 ...

  8. 【双100%解法】LeetCode 141 【剑指Offer 23】链表中环的入口节点

    立志用最少的代码做最高效的表达 给定一个链表,判断链表中是否有环. 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环. 为了表示给定链表中的环,我们使用整数 pos 来表 ...

  9. 【剑指offer】面试题23:链表中环的入口节点

    一个链表中包含环,请找出该链表的环的入口结点 代码: package offer; class Node3 {     int val;     Node3 next = null;     Node ...

最新文章

  1. php请求来源,如何用PHP获取请求的来源?
  2. 各种编程语言的深度学习库整理
  3. 让PIP源使用国内镜像,提升下载速度和安装成功率。
  4. SDK,JDK,API的区别
  5. 2008R2Win7管理二十六ADRMS客户端使用及侦错
  6. Windows Runtime (RT)
  7. CPUID详解[增加TLB与Cache]
  8. 看完动画你还敢说不会 快速排序
  9. 解决Struts2的配置文件struts.xml文件无提示问题
  10. vue rule鼠标移走校验_Vue-cli+Element-ui实现后台管理系统(二)实现后台登录功能...
  11. labview和python混编_将数据从LabView发送到Python并取回
  12. java jsonarray 拷贝_JSONObject与JSONArray使用
  13. ESP32C3 CORE+PIO+lvgl显示
  14. [2017湖南集训7-8]暗牧 虚树+最短路
  15. 016-打印菱形-【c语言版】
  16. python中的统计模型库——statsmodels
  17. RB女歌手宇西个人单曲《盛宴》上线 诠释独自疗伤的故事
  18. 20191009 3. 史上最全的USB-PD充电协议,包含PD协议波形图
  19. 软件工程毕业设计课题(21)基于JAVA毕业设计电子书小说网站系统毕设作品项目
  20. 计算机里的MAC,怎么在mac苹果电脑中查看电脑开机运行的时长

热门文章

  1. Python中join()方法和os.path.join()方法
  2. 中小型研发团队架构实践:电商如何做企业总体架构?
  3. Java内存模型深度解析:volatile--转
  4. 关于架构的优化和设计,架构师必须悟透的事情
  5. spring源码分析之spring-web http详解
  6. rabbitmq Clustering Guide--官方
  7. DNS服务器全面解析--转
  8. android 手机投影演示 ——vysor操作手册
  9. Navicat通过跳板机连接数据库
  10. apache2 默认端口修改