目录:

  • 1.带环问题(判断是否带环)
    • (1)题目描述
    • (2)思路解析
      • a.问题: 怎么证明快指针和慢指针一定会在环里相遇,而不是一直错过?
      • b.问题:如果slow一次走一步,fast一次走3步?fast一次走4步?fast一次走n步?能追上吗?
    • (3)代码实现
  • 2.带环问题(返回入环点)
    • (1)题目描述
    • (2)思路解析
    • (3)代码实现

1.带环问题(判断是否带环)

(1)题目描述

给定一个链表,判断链表中是否有环

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。
如果链表中存在环,则返回 true 。 否则,返回 false 。

示例1

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

示例2

输入:head = [1], pos = -1
输出:false
解释:链表中没有环。
使用语言: C语言

(2)思路解析

此题可以用快慢指针解决,给两个指针分别指向链表的头节点,慢指针走一个节点快指针走两个节点,当快指针为空或快指针的next为空,则不带环。若快指针指向和慢指针直指向的同一位置,则证明此链表带环,且二者必在环里相遇

a.问题: 怎么证明快指针和慢指针一定会在环里相遇,而不是一直错过?

b.问题:如果slow一次走一步,fast一次走3步?fast一次走4步?fast一次走n步?能追上吗?

结论:不一定能追上
如果slow一次走一步,fast一次走3步,它们之间的差距就是
n-2
n-4
n-6

如果差距是0就追上了,相当于slow在原地不动,fast每次走两步,以减小两者之间的差距,那么说明如果n是偶数,就能追上,n是奇书就会错过,最特殊的情况错过之后,差距还是奇数,那么就会永远追不上
如果fast每次走4/5/…/n步是同样的道理

(3)代码实现

bool hasCycle(struct ListNode *head)
{struct ListNode * slow = head;struct ListNode * fast = head;//若fast或fast->next为空不带环while(fast && fast->next){slow = slow->next;fast = fast->next->next;//若两个指针指向同一位置,则代换if(fast == slow)return true;}return false;
}

2.带环问题(返回入环点)

(1)题目描述

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

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

示例1

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

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

(2)思路解析

给两个指针分别指向链表的头节点,慢指针走一个节点快指针走两个节点,当快指针为空或快指针的next为空,则不带环。若快指针指向和慢指针直指向的同一位置,则证明此链表带环,且二者必在环里相遇,保存两个指针相遇的位置到给指针meet,此时meet位置距离入环节点的位置刚好等于head到入环节点的位置,此时只需让meet和head同时走,二者相遇的位置就是入环节点的位置

图解如下:

(3)代码实现

struct ListNode *detectCycle(struct ListNode *head)
{struct ListNode * fast = head;struct ListNode * slow = head;//先判断是否带环while(fast && fast->next){slow = slow->next;fast = fast->next->next;if(slow == fast){//相遇的节点给meetstruct ListNode * meet = slow; //带环,给两个指针一个head一个meet,两个指针同时走,直到相遇,相遇点就是入环的节点while(meet != head){head = head->next;meet = meet->next;}return head;}}return NULL;
}

LeetCode 141.带环问题(判断是否带环) 142.带环问题(返回入环点)相关推荐

  1. 【刷算法】判断链表是否有环以及返回入环节点

    题目描述 判断一个单链表是否有环,有环则返回入环节点,否则返回null 1->2->3->4->5->6↑ ↓8<-7 复制代码 例如上面这个链表就有环,入环节点是 ...

  2. 环形链表[快慢指针 入环点]

    环&快慢指针 前言 一.环形链表 二.快慢指针 1.相遇即有环 2.入环点 总结 参考文献 前言 对于环问题,快慢指针是一种常用的手段.一步两步走,通过判定是否相遇来判定是否存在环.而且快慢指 ...

  3. 智能车心得分享(六)-- 电磁入环

    这一篇算是为智能车画上个句号吧,之后看会不会分享下其他的东西,有点懒,一开始还想着能不能周更,最后变成年更了,hhh,不知道之前说的东西有没有帮助到大家. 电磁入环分几部分来讲,首先要给大家介绍一个思 ...

  4. 算法练习——判断链表是否有环 leetcode.141 python

    题目描述: 给你一个链表的头节点 head ,判断链表中是否有环. 如果链表中存在环 ,则返回 true . 否则,返回 false . 方法一:hash表 hashset是一种特殊的hashmap, ...

  5. 编写一个函数,该函数能判断一个英文句子str(带空格)中是否含有某个单词w,如“How old are you?”含有“old”。在main函数中输入一个英文句子,再输入一个单词,如果英文句子中含有那

    题目要求: 编写一个C程序,实现以下功能: 编写一个函数,该函数能判断一个英文句子str(带空格(升级版))中是否含有某个单词w,如"How old are you?"含有&quo ...

  6. 通过PHP自带的$_SERVER判断 手机访问网站自动跳转到手机版

    需要有PC版网站和移动版网站,当手机访问域名的时候,通过PHP自带的$_SERVER判断浏览设备并跳转到移动版页面.如果是PC电脑打开网址,则不跳转直接访问pc版. 1 <?php 2 //ph ...

  7. 带负荷测试要求二次最小电流_带负荷检查

    (0) 1 引言 差动保护原理简单.使用电气量单纯.保护范围明确.动作不需延时,一直 用于变压器做主保护, 其运行情况直接关系到变压器的安危. 怎样才知道差动保 护的运行情况呢?怎样才知道差动保护的整 ...

  8. 计算机专业开学要带电脑吗,大学新生刚开学需要带电脑吗

    大学新生刚开学需要带电脑吗2017-08-16 08:57:38文/叶丹 高三毕业之后,我们很快就步入了大学.高中生活是压抑的,那么无疑到了大学我们如脱了缰的野马,渴望自由的,大学的生活对于我们来说是 ...

  9. 大学生学计算机专业开学要带电脑吗,大学新生刚开学需要带电脑吗

    高三毕业之后,我们很快就步入了大学.高中生活是压抑的,那么无疑到了大学我们如脱了缰的野马,渴望自由的,大学的生活对于我们来说是新奇的,充满着未知,我们总想着做一些高中不能做的事情.对于刚步入大学的同学 ...

最新文章

  1. 详解Numpy的广播机制
  2. [easyui] 在iframe中操作父窗口的组件
  3. Appium环境搭建python篇(mac系统)
  4. 网上学c语言推荐课程网站,C语言教学网络课程网站论文
  5. Photoshop 手动画金标准流程
  6. halcon 3D Object Model 三维物体模型算子,持续更新
  7. 通用业务流水号功能设计
  8. 【LCT】遥远的国度(P3979)
  9. 前端vscode插件合集
  10. python之元组操作
  11. 从零开始理解JAVA事件处理机制(3)
  12. tp1900芯片对比7621a_MT7621A和MT7620A两个芯片,性能相差大吗?
  13. PHP 实现 阿里云 短信接口调用
  14. 词云图,词频图,专门统计某些关键词的词云词频
  15. CF235C Cyclical Quest
  16. 基于arduino的火焰报警蜂鸣器播放音乐(外部中断)实验
  17. Microsoft SUS Deployment
  18. 微信个性签名服务器维护,微信个性签名显示由于系统维护
  19. 数值积分-龙贝格(Romberg)积分
  20. 视频剪辑,大师珍藏的素材都在这里!

热门文章

  1. c语言中宏定义的字符替换#define M(x,y,z) x*y+z
  2. 计算机论文写法,计算机专业论文写作方法.ppt
  3. ARP欺骗攻击的检测和防御
  4. Netcraft brain-dead
  5. JS弹出模态窗口下拉列表特效
  6. ddos攻击怎么防御/ddos防御
  7. no available service ‘null‘ found, please make sure registry config correct
  8. 计算机设置音乐和主题教案,幼儿园主题音乐教案
  9. 计算机模拟贝特朗奇论,由贝特朗奇论谈几何概型中的等价转化
  10. 第一天、python之路