题目描述:

一个链表中包含环,请找出该链表的环的入口结点。

分析:

设置两个指针p1,p2,

两个指针都从链表的头部开始走,不过p1每次走一步,p2每次走两步。

直到相遇的时候,p2走的长度是p1的两倍。

此时让p2从头开始走,p1继续往下走,不过此时两指针都是一步一步走。

再次相遇的地点就是环的入口。

证明:

假设结点数一共有m个,环中的结点数有n个。

第一次相遇的时候,它们肯定是在环中相遇的,p1走了s1步,p2走了2*s1步。

那么此时它们在环中的位置是一样的,即(s1-(m-n))%n=(2*s1-(m-n))%n,

也就是s1-(m-n)和2*s1-(m-n)同余,充要条件是(2*s1-(m-n))-(s1-(m-n))是n的整数倍,即s1是n的整数倍。

此时如果让p1再走(m-n)步,那么p1将停在环的入口处,因为p1一共走了m+n*k的步数。

那么我们此时让p2从起点开始一步一步走,到达环的入口也是(m-n)步。所以此时它们会在环的入口处相遇。

代码:

 1 /*
 2 struct ListNode {
 3     int val;
 4     struct ListNode *next;
 5     ListNode(int x) :
 6         val(x), next(NULL) {
 7     }
 8 };
 9 */
10 class Solution {
11 public:
12     ListNode* EntryNodeOfLoop(ListNode* pHead) {
13         ListNode* p1 = pHead;
14         ListNode* p2 = pHead;
15         while(p2 && p2->next) {
16             p1 = p1->next;          // p1走一步
17             p2 = p2->next->next;    // p2走两步
18             if(p1 == p2) {          // 相遇的时候,p2的步数是p1的两倍
19                 p2 = pHead;         // 让p1又从头开始走
20                 while(p1 != p2) {   // 现在p1和p2都一步一步走,直到他们相遇,相遇的位置就是环的入口
21                     p1 = p1->next;
22                     p2 = p2->next;
23                 }
24                 return p2;
25             }
26         }
27         return NULL;
28     }
29 };

转载于:https://www.cnblogs.com/jacen789/p/7747783.html

剑指Offer——链表中环的入口结点相关推荐

  1. python数据结构剑指offer-链表中环的入口结点

    例题 描述 给一个长度为n链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null. 数据范围: n\le10000n≤10000,1<=结点值<=100001<=结点值& ...

  2. 剑指offe55--链表中环的入口结点

    给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 做这个题之前,我们应该先明白链表有环是什么的样的情况,理解的什么链表中有环的样子,我们就可以来理解这个题的思路的.这个题分两 ...

  3. 《剑指offer》-- 两个链表的第一个公共结点、链表中环的入口结点、删除链表中的重复结点

    一.两个链表的第一个公共结点: 1.题目: 输入两个链表,找出它们的第一个公共结点. 2.解题思路: (1)第一种:找出两个链表的长度,然后让长的链表先走两个链表的长度差,接着两个链表一起走. (2) ...

  4. 链表中环的入口结点 python_【Github 5K星】BAT头条滴滴小米等笔试面经+深度学习/算法/NLP资源汇总!...

    最近,在GitHub上有位id为imhuay的热心人带头建立了一个关于国内知名互联网企业笔试和面试经验的资源库,光从名称上就能看出其内容有多丰富:<2018/2019/校招/春招/秋招/算法/机 ...

  5. 链表2--JZ25复杂链表的复制JZ36两个链表的第一个公共结点JZ55链表中环的入口结点JZ56删除链表中重复的结点

    JZ25复杂链表的复制 >>点击此链接 JZ36两个链表的第一个公共结点 题目描述 输入两个无环的单链表,找出它们的第一个公共结点.(注意因为传入数据是链表,所以错误测试数据的提示是用其他 ...

  6. 递增的整数序列链表的插入_每日算法题 | 剑指offer 链表专题 (5)链表中倒数第k个节点...

    点击上方"Jerry的算法和NLP",选择"星标"公众号 重磅干货,第一时间送达 题目 链表中倒数第k个节点 题目要求 输入一个链表的头结点,从尾到头反过来打印 ...

  7. 链表中环的入口结点 python_链表中环的入口结点

    117 推荐 编辑于 2015-08-25 11:27:14 回复(43) 287 思路: 设置快慢指针,都从链表头出发,快指针每次走两步,慢指针一次走一步,假如有环,一定相遇于环中某点(结论1).接 ...

  8. 划水总结剑指offer 链表系列1

    最近在找实习,发现面试题和oj的题差距蛮大的,然后粗略的刷了一遍剑指offer.希望6月中旬前能拿个实习(捂脸哭) 1.首先总结关于链表的题. (1)从尾到头打印一个链表.像我这样的憨憨上来就想 这不 ...

  9. 剑指offer:链表中环的入口结点

    题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 解题 快慢指针,fast走两步,slow走一步,当他们相遇时,fast走了一圈环,设环为n个节点,此时slow走的 ...

最新文章

  1. 02移动端布局基础之流式布局项目实战(京东移动端首页)
  2. 《社交网站界面设计(原书第2版)》——2.10 自我反省式的出错信息
  3. 15条走红网络的手机摄影技巧
  4. 分布式服务框架原理(一)设计和实现
  5. HDU - 6749 Mosquito(二分+状态压缩+最大流)
  6. 作为Java程序员应该掌握的10项技能
  7. Mysql5.7.26解压版(免安装版)简单快速配置步骤,5分钟搞定(win10-64位系统)
  8. python3打印不换行
  9. vue element form 自定义校验1(表单校验)
  10. 异常:System.BadImageFormatException,未能加载正确的程序集XXX
  11. Redis 服务器安装
  12. bzoj 2705: [SDOI2012]Longge的问题(欧拉函数)
  13. 一阅阅读-ios上的免费换源小说阅读器
  14. 计算机网络:网络拓扑分类
  15. office 宏病毒分析
  16. Keil中部分Error Warning解决方法记录
  17. 无需剪辑软件,教你简单快速进行剪辑视频
  18. java 发送邮件 ip被网易拉黑,发信IP或者发件人地址被网易加入了黑名单,原因如下及解决方法!...
  19. 【渝粤题库】陕西师范大学202491 法语(一)作业
  20. Docker入门实战大全终极版

热门文章

  1. 2021 最新CV综述分类汇总(持续更新)
  2. SiamFC++,90 fps的单目标跟踪SOTA
  3. 边缘深度学习设备基准评测:英伟达Jetson Nano胜出
  4. linux如何添加默认路由表_linux 添加静态路由
  5. 零基础快速入门python教程,结合新手练习的5大项目
  6. 移动信号突然变成无服务器,为什么移动4G信号突然变成H、E、G就无法上网, 背后的真实原因?...
  7. 深度学习行人重识别综述与展望
  8. Anchor-free新思路,统一目标检测、实例分割、姿态估计三种任务
  9. 酷爆了!阿里预测2020十大科技趋势
  10. easyui前端框架模板_.NET Core基于Ace Admin的响应式框架