判断给定的链表是否有环
哈希缓存法
过程:
(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,则表明链表存在环。
判断给定的链表是否有环相关推荐
- 用python 判断一个单链表是否有环
文章目录 用python 判断一个单链表是否有环. 第二次做DAY20201130 [141. 环形链表](https://leetcode-cn.com/problems/linked-list-c ...
- 判断一个单链表是否有环,若有,找出环的入口节点
题目:如何判断一个单链表是否有环?若有环,如何找出环的入口节点. 一.单链表是否有环 思路分析: 单链表有环,是指单链表中某个节点的next指针域指向的是链表中在它之前的某一个节点,这样在链表的尾部形 ...
- 如何判断一个单链表是否有环?
快慢指针查询,快指针每次跳两个,慢指针每次跳一个,如果两指针相等时,就证明有环 环的入口: 用两个指针,一个指向快慢指针相交点(这里就是慢指针走,慢指针在走快指针的一半就相当于快指针走的路了,还会到这 ...
- 链表之判断链表是否有环
描述 判断给定的链表中是否有环.如果有环则返回true,否则返回false. 数据范围:链表长度 0≤n≤10000,链表中任意节点的值满足 ∣val∣<=100000 要求:空间复杂度 O(1 ...
- C++:判断链表是否有环
判断给定的链表中是否有环.如果有环则返回true,否则返回false. /*** Definition for singly-linked list.* struct ListNode {* int ...
- 【刷算法】判断链表是否有环以及返回入环节点
题目描述 判断一个单链表是否有环,有环则返回入环节点,否则返回null 1->2->3->4->5->6↑ ↓8<-7 复制代码 例如上面这个链表就有环,入环节点是 ...
- php判断单向链表中有没有环,python判断链表是否有环的实例代码
先看下实例代码: class Node: def __init__(self,value=None): self.value = value self.next = None class LinkLi ...
- 如何判断链表有环、如何判断两个链表相交
如何判断单链表是否存在环 有一个单向链表,链表当中有可能出现"环",就像题图这样.如何用程序判断出这个链表是有环链表? 不允许修改链表结构. 时间复杂度O(n),空间复杂度O(1) ...
- 判断链表是否有环及环入口点的求法
首先,判断一个单链表是否有环.网上有很多解法就是设置两个指针fast,slow分别指向链表头部,然后同时向后遍历.fast步长为2即每次走两步,slow每次走一步.如果fast走到链表尾部则肯定没有环 ...
最新文章
- Java获取游戏头像_java爬取堆糖所有头像(高质量版头像)
- iwconfig 安装_iwconfig linux 命令行配置无线网卡
- 一些IOS开发中的小技巧
- 子类访问父类和方法覆写
- @Autowired注解实现原理
- IIS 7 托管管道模式 经典模式(Classic) 集成模式(Integrated) 分析与理解
- php dns失败,dns错误是什么意思
- 单纯形法只有两个约束条件_教学 | 线性规划 7 :单纯形法的引入
- 如何配置IIS日志信息
- Linux Shell数值比较和字符串比较及相关
- C++ Primer Plus学习(十四)——友元、异常和其他
- 二十五、JAVA多线程(三、线程同步)
- 计算机三四级网络技术,全国计算机等级考试四级网络技术论述题真题(2-3)
- Array Shrinking
- 《Python程序设计基础 》课堂笔记整理
- kubeadm安装部署k8s(1)
- 【管理篇 / 诊断】❀ 01. 了解防火墙的性能参数 ❀ FortiGate 防火墙
- 11-git-查看提交历史
- 倒置字符串 将一句话的单词进行倒置,标点不倒置。
- 硬盘分类(HDD、HHD、SSD)简介