哈希缓存法

过程:
(1)首先创建一个以节点 ID 为键的 HashSet集合,用来存储曾经遍历过的节点。
(2)从头节点开始,依次遍历单链表的每一个节点。
(3)每遍历到一个新节点,就用新节点和 HashSet 集合当中存储的节点作比较,如果发现 HashSet 当中存在相同节点 ID,则说明链表有环,如果HashSet 当中不存在相同的节点 ID,就把这个新节点 ID 存入 HashSet ,之后进入下一节点,继续重复刚才的操作。

算法分析:
假设从链表头节点到入环点的距离是 a ,链表的环长是 r 。而每一次HashSet 查找元素的时间复杂度是 O(1), 所以总体的时间复杂度是 1 * ( a + r ) = a + r,可以简单理解为 O(n) 。而算法的空间复杂度还是 a + r - 1,可以简单地理解成 O(n) 。

快慢指针法

过程解释:
(1)定义两个指针分别为 slow,fast,并且将指针均指向链表头节点。
(2)规定,slow 指针每次前进 1 个节点,fast 指针每次前进两个节点。
(3)当 slow 与 fast 相等,且二者均不为空,则链表存在环。

分析:
若表中不存在环形,fast 与 slow 指针只能在链表末尾相遇。
若链表中存在环,则快慢指针必然能在环中相遇。这就好比在***环形跑道***中进行龟兔赛跑。由于兔子速度大于乌龟速度,则必然会出现兔子与乌龟再次相遇情况。因此,当出现快慢指针相等时,且二者不为NULL,则表明链表存在环。

判断给定的链表是否有环相关推荐

  1. 用python 判断一个单链表是否有环

    文章目录 用python 判断一个单链表是否有环. 第二次做DAY20201130 [141. 环形链表](https://leetcode-cn.com/problems/linked-list-c ...

  2. 判断一个单链表是否有环,若有,找出环的入口节点

    题目:如何判断一个单链表是否有环?若有环,如何找出环的入口节点. 一.单链表是否有环 思路分析: 单链表有环,是指单链表中某个节点的next指针域指向的是链表中在它之前的某一个节点,这样在链表的尾部形 ...

  3. 如何判断一个单链表是否有环?

    快慢指针查询,快指针每次跳两个,慢指针每次跳一个,如果两指针相等时,就证明有环 环的入口: 用两个指针,一个指向快慢指针相交点(这里就是慢指针走,慢指针在走快指针的一半就相当于快指针走的路了,还会到这 ...

  4. 链表之判断链表是否有环

    描述 判断给定的链表中是否有环.如果有环则返回true,否则返回false. 数据范围:链表长度 0≤n≤10000,链表中任意节点的值满足 ∣val∣<=100000 要求:空间复杂度 O(1 ...

  5. C++:判断链表是否有环

    判断给定的链表中是否有环.如果有环则返回true,否则返回false. /*** Definition for singly-linked list.* struct ListNode {* int ...

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

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

  7. php判断单向链表中有没有环,python判断链表是否有环的实例代码

    先看下实例代码: class Node: def __init__(self,value=None): self.value = value self.next = None class LinkLi ...

  8. 如何判断链表有环、如何判断两个链表相交

    如何判断单链表是否存在环 有一个单向链表,链表当中有可能出现"环",就像题图这样.如何用程序判断出这个链表是有环链表? 不允许修改链表结构. 时间复杂度O(n),空间复杂度O(1) ...

  9. 判断链表是否有环及环入口点的求法

    首先,判断一个单链表是否有环.网上有很多解法就是设置两个指针fast,slow分别指向链表头部,然后同时向后遍历.fast步长为2即每次走两步,slow每次走一步.如果fast走到链表尾部则肯定没有环 ...

最新文章

  1. Java获取游戏头像_java爬取堆糖所有头像(高质量版头像)
  2. iwconfig 安装_iwconfig linux 命令行配置无线网卡
  3. 一些IOS开发中的小技巧
  4. 子类访问父类和方法覆写
  5. @Autowired注解实现原理
  6. IIS 7 托管管道模式 经典模式(Classic) 集成模式(Integrated) 分析与理解
  7. php dns失败,dns错误是什么意思
  8. 单纯形法只有两个约束条件_教学 | 线性规划 7 :单纯形法的引入
  9. 如何配置IIS日志信息
  10. Linux Shell数值比较和字符串比较及相关
  11. C++ Primer Plus学习(十四)——友元、异常和其他
  12. 二十五、JAVA多线程(三、线程同步)
  13. 计算机三四级网络技术,全国计算机等级考试四级网络技术论述题真题(2-3)
  14. Array Shrinking
  15. 《Python程序设计基础 》课堂笔记整理
  16. kubeadm安装部署k8s(1)
  17. 【管理篇 / 诊断】❀ 01. 了解防火墙的性能参数 ❀ FortiGate 防火墙
  18. 11-git-查看提交历史
  19. 倒置字符串 将一句话的单词进行倒置,标点不倒置。
  20. 硬盘分类(HDD、HHD、SSD)简介

热门文章

  1. 浅谈Android MVI架构---大自然的搬运工~~~
  2. Android onFinishInflate 的理解
  3. python最最最重要的数据分析工具之pandas
  4. 关于m个n-1维几何体最大分割n维空间问题的解法
  5. .NET 开发电子病历系统(EMR)
  6. python基础-第一个python程序
  7. C++基础知识 - 布尔(bool)类型
  8. VRML---第五章(动画流程和交互功能)
  9. 2018年2月新年里
  10. 基于电除尘器PLC控制系统如何实现数据采集和远程上下载程序