一、检测单链表中存在环

① 环的定义
  • 单链表中结点都是一个结点指向下一个结点这样一个一个链接起来的,直到尾结点的指针域没有指向,单链表就到此结束。
  • 链表有环的定义是,链表的尾结点的指针域并为空,指向了链接中间的某个结点,这样就形成环,遍历单链表就会死循环,这是因为破坏了结束条件。
  • 如下所示:如果单链表有环,则在遍历时,在通过结点 J 之后,会重新回到结点 D:

② 快慢指针检测
  • 设两个工作指针,一个快一个慢,如果有环的话,它们会必然在某点相遇。
  • 算法的思想是:设定使用两个指针,fast 与 slow,它们起始都位于链表的头部。随后,slow 指针每次向后移动一个位置,而 fast 指针向后移动两个位置。如果链表中存在环,则 fast 指针最终将再次与 slow 指针在环中相遇。
  • 如下图所示,设链表中环外部分的长度为 a。slow 指针进入环后,又走了 b 的距离与 fast 相遇。此时,fast 指针已经走完了环的 n 圈,因此它走过的总距

【数据结构与算法】之深入解析如何确定单链表有环并求环的入口和长度相关推荐

  1. 数据结构》算法实现及解析].高一凡.

    未整理电子书4 [2012玛雅末日预言].(2012玛雅末日预言).布莱恩·达莫托.文字版.pdf: http://www.t00y.com/file/59485560 [21st.Century.C ...

  2. 数据结构精品电子书分享之《数据结构》算法实现及解析

    书籍简介 作者:高一凡 副书名:配合严蔚敏.吴伟民编著的<数据结构>(C语言版) 出版日期:2002-10-1 出版社:其它 页数:450 ISBN:7-5606-1176-1/TP*06 ...

  3. 阿里架构师强烈推荐《数据结构与算法经典问题解析》(PDF文档)

    前言: 小编整理了一份数据结构与算法经典问题解析核心知识点.覆盖递归和回溯.链表.栈.队列.树.优先队列和堆.队列.优先队列和堆.并查集ADT.排序.选择算法(中位数).散列.算法设计技术.分治算法. ...

  4. 硬核 阿里P8终于把(数据结构与算法经典问题解析)讲全了

    随着科学技术的发展,人工智能已经逐渐渗透到各个行业,这是一个相当有前景的专业领域. 其中,算法工程师这一职位更是非常火爆,在急缺大量人才的同时,也吸引了众多求职者,那么,初学者该如何学好算法呢? 算法 ...

  5. 数据结构与算法学习(第三天单链表节点数、倒数k个节点值、反转、尾到头打印)

    求单链表中有效节点的个数 //获取到但链表的节点的个数(如果是带头节点的链表,需求不统计头节点)public static int getLength(HeroNode head){if(head.n ...

  6. 常考数据结构与算法:合并k个已排序的链表

    题目描述 合并\ k k 个已排序的链表并将其作为一个已排序的链表返回.分析并描述其复杂度. 示例1 输入 [{1,2,3},{4,5,6,7}] 返回值 {1,2,3,4,5,6,7} import ...

  7. 数据结构(算法)-线性表2(单链表)

    为什么80%的码农都做不了架构师?>>>    /** 单链表 双链表1,空的线性表setNull(L) 2,insert 加入元素 3,根据位置查找元素 4,查找所有元素 5,删除 ...

  8. java 链表实现堆栈_《Java数据结构与算法》笔记-CH5-链表-4用链表实现堆栈

    //用链表实现堆栈 /** * 节点类 */ class LinkS { private long data; public LinkS next; public LinkS(long d) { th ...

  9. 【亡羊补牢】挑战数据结构与算法 第59期 LeetCode 19. 删除链表的倒数第N个节点(链表)

    仰望星空的人,不应该被嘲笑 题目描述 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. ...

最新文章

  1. 深入浅出 JQuery (一) 浅析JQuery
  2. 博客系统的设计与实现_企业车辆管理系统设计与实现
  3. 多任务学习(MTL)在转化率预估上的应用
  4. wincc和matlab通信,Matlab与WinCC之间的数据通信.doc
  5. 常见数据结构总结,持续更新...
  6. 如何设置mysql数据库连接池的大小
  7. Linux下查看软件安装与安装路径
  8. Genius‘s Gambit(构造)
  9. 近期看到的很有意思的文章
  10. ELK入门使用-与springboot集成
  11. USB2.0系列(锆石科技FPGA)
  12. Kotlin里的takeIf和takeUnless
  13. 如何使用Pixelmator Pro处理图片?mac pixelmator使用教程
  14. 大数据体系构建数据仓库
  15. https防止注入_离子注入新法,将钢的耐磨性提高百倍
  16. cad把图形切成两部分_转载一位CAD大神的学习笔记, 初学CAD的人可以看看
  17. mysql迁移时出现错误:INFO [alembic.runtime.migration] Context impl MySQLImpl. INFO [alembic.runtime.migrat
  18. 正则表达式全部特殊符号
  19. ICRA人工智能挑战赛参赛准备(一)重刷系统
  20. 腾讯财报:Q2游戏收入430亿元,12岁以下未成年人占比0.3%

热门文章

  1. MacOS安装react。问题 -- npm全局包的权限问题
  2. antd 刷新页面及后退时菜单栏高亮问题
  3. python中的浅拷贝与深拷贝——copy()
  4. 新的地方门户社区论坛前期运营思路及指南
  5. linux搭建windows无盘系统,PXE+HTTP 无盘安装linux系统
  6. java主类与源代码名称_java 获取操作系统名称 附源代码
  7. php 反射类,PHP中的反射类
  8. python 计时_python怎么实现计时
  9. Java黑皮书课后题第10章:10.4(MyPoint类)设计一个名为MyPoint的类,代表一个以x坐标和y坐标表示的点
  10. Java黑皮书课后题第10章:*10.1(Time类)设计一个名为Time的类。编写一个测试程序,创建两个Time对象(使用new Time()和new Time(555550000))