当前位置: 首页 > news >正文

判断链表有环的证明

目录

1.问题      

2.证明

3.代码实现


1.问题      

        给你一个链表的头节点 head ,判断链表中是否有环。

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

        如果链表中存在环 ,则返回 true 。 否则,返回 false 。

         

2.证明

        使用快慢指针的方法可以很简单的达到目的,慢指针每次走一步快指针每次走两步,如果在链表中存在环,入环以后快慢指针没走一次,他们直接的距离就会减一,直至最后它们会在环里面相遇,如图: 

        思考一个问题,快指针必须走两步吗,快指针每次走三步行不行,四步呢?五步呢?N步行不行?

        假设快指针每次走三步,当慢指针入环时,它们同时向后走,每次它们之间的距离会减少2,但是如果它们之间的距离是奇数,那么他们这次就不会相遇,极限清空下,他们每次的距离都是奇数的话,那么他们是不是就永远不会相遇了,走N步的道理也是一样的。如图:

 

3.代码实现

typedef struct ListNode Node;
bool hasCycle(struct ListNode *head) 
{//金典的快慢指针法//快指针每次走两步,慢指针每次走一步,//快指针先进环,慢指针后进环//在环的里面每走一次快慢指针直接的距离缩小1//最终快指针会追上慢指针//如果最终不想交说明链表没有环Node* slow = head;Node* fast = head;while(fast && fast->next){fast = fast->next->next;slow = slow->next;if(slow == fast){//在环里面相遇return true;}}return  false;
}

http://www.lryc.cn/news/123424.html

相关文章:

  • 百度屏蔽词有哪些?其中就有移民关键词指数被屏蔽?
  • 代码随想录day02
  • VR时代真的到来了?
  • docker run 命令转化为 docker-compose 工具
  • php如何对接伪原创api
  • 设计模式行为型——模板模式
  • 12.Eclipse导入Javaweb项目
  • 探索自动化网页交互的魔力:学习 Selenium 之旅【超详细】
  • css常用样式和不常用样式
  • 【小练习】交互式网格自定义增删改错误记录及解决(进行中)
  • 云渲染效果不对?云渲染前的四个细节表明你的问题出在这里!
  • 翻转二叉树
  • 检测新突破 | AlignDet:支持各类检测器自监督新框架(ICCV2023)
  • 03.Show and Tell
  • QStackedWidget 的使用
  • 大数据--难点--地图的制作
  • 【AI作画】使用Stable Diffusion的艺术二维码完全生成攻略
  • SQLAlchemy------更多查询
  • 13-数据结构-串以及KMP算法,next数组
  • Stable Diffusion - 俯视 (from below) 拍摄的人物图像 LoRA 与配置
  • Redis——String类型详解
  • Android:换肤框架Android-Skin-Support
  • 软件测试面试心得:四种公司、四种问题…
  • 【探索SpringCloud】服务发现-Nacos使用
  • soap通信2
  • 【MySQL】MySQL不走索引的情况分析
  • JVM垃圾回收篇-垃圾回收算法
  • android APP内存优化
  • mysql_docker主从复制_实战_binlog混合模式_天座著
  • 鸿蒙开发学习笔记1——真机运行hello world