LeetCode141. 环形链表判断链表是否有环
题目要求
原题目链接:141. 环形链表
题目要求如下:
给你一个链表的头节点 head ,判断链表中是否有环。
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。
如果链表中存在环,则返回 true 。 否则,返回 false 。
示例如下:
输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。
ListNode节点结构如下:
class ListNode {int val;ListNode next;ListNode(int x) {val = x;next = null;}}
解法1:Set集合储存遍历过的节点
思路
根本思路是在遍历过程中判断当前被遍历的节点此前是否被访问过。
链表如果成环的情况下,那么意味着链表中的环部分在遍历过程中一定会被多次遍历,那么只需要将遍历过的节点保存在一个容器中,每次遍历在容器中进行搜索判断,如果容器中已经存在了当前遍历的节点,则说明当前链表有环,且第一个重复出现的节点就是环的入口节点。
复杂度
- 时间复杂度:O(n),最坏情况是一次对链表的遍历
- 空间复杂度:O(n),最坏的情况是额外存储整个链表
n为链表中的节点数
AC代码
public class Solution {public boolean hasCycle(ListNode head) {HashSet<ListNode> hashSet = new HashSet<>();while(head != null){if(hashSet.contains(head)){return true;}hashSet.add(head);head = head.next;} return false;}
}
解法2:快慢指针
思路
设置两个指针对链表进行遍历,指针遍历速度一快一慢。
- 链表中无环的情况:快指针最终会先遍历完链表,快指针遍历结束等于null时表示链表无环。
- 链表中有环的情况:在环路中,两个指针一快一慢的遍历,最总速度快的指针一定会追上速度慢的指针,也就是说如果在遍历过程中发现快指针和慢指针的指向相同,意味着链表有环。
复杂度
- 时间复杂度:O(n)
- 空间复杂度:O(1),只额外需要两个指针
n为链表中的节点数
AC代码
public class Solution {public boolean hasCycle(ListNode head) {ListNode slow = head;ListNode fast = head;while(fast != null){fast = fast.next;if(fast == null){return false;}fast = fast.next;slow = slow.next;if(fast == slow){return true;}}return false;}
}
LeetCode141. 环形链表判断链表是否有环相关推荐
- 链表--判断链表中是否有环
题目: 判断给定的链表中是否有环.如果有环则返回true,否则返回false. 数据范围:链表长度 0≤n≤10000,链表中任意节点的值满足 ∣val∣<=100000 要求:空间复杂度 O( ...
- 【Java】环形链表 ( 给定一个链表,判断链表中是否有环)
题目描述 :给你一个链表的头节点 head ,判断链表中是否有环. 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环. 为了表示给定链表中的环,评测系统内部使用整数 po ...
- 判断链表中是否有环(环形链表)
题意: 给定一个链表,判断链表中是否有环. 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位 ...
- 双指针算法之快慢指针(一):力扣【判断链表是否有环】leetcode-141、142
一.简介:什么是快慢指针? 快慢指针,顾名思义,无非就是设置一个快指针,一个慢指针,初始化的时候,快指针和慢指针都指向链表的头结点,前进的时候一个在前一个在后,结合起来可以十分巧妙的解决链表中的一些问 ...
- LeetCode141:判断链表是否有环
题目描述: 给你一个链表的头节点 head ,判断链表中是否有环. 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环. 为了表示给定链表中的环,评测系统内部使用整数 po ...
- 环形链表。给定一个链表,判断链表中是否有环。(GO、PHP)
给定一个链表,判断链表中是否有环. 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引 ...
- leetcode141. 环形链表
leetcode141. 环形链表 题目描述 链接: leetcode141. 给定一个链表,判断链表中是否有环. 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环. 为 ...
- 漫画算法:如何判断链表有环?
大四毕业前夕,计算机学院, 正在四处求职的小灰碰到了同系的学霸大黄...... 小灰边说边回忆着上周去面试的情形...... 有一个单向链表,链表当中有可能出现"环",就像下图这样 ...
- 【刷算法】判断链表是否有环以及返回入环节点
题目描述 判断一个单链表是否有环,有环则返回入环节点,否则返回null 1->2->3->4->5->6↑ ↓8<-7 复制代码 例如上面这个链表就有环,入环节点是 ...
最新文章
- 11年瑞纳手动挡值多少钱_三分钟让你知道手中的松石值多少钱
- ModuleNotFoundError: No module named ‘config‘
- 初学Java Web(7)——文件的上传和下载
- 类模板非类型形参实现Stack
- C++相关:动态内存和智能指针
- 重学数据结构004——栈的基本操作及实现(数组实现)
- 动手造轮子:实现一个简单的依赖注入(零)
- php 身份认证服务,PHP的HTTP身份认证
- 面试准备-Shell脚本
- Python 资源库大全
- 嵌入式系统TinyOS学习资源
- 黑盒测试--等价类划分
- yuzu模拟器linux,yuzu模拟器使用教程 yuzu模拟器手机版下载
- 浅谈同构类问题的骗分算法
- Linux 下屏幕旋转
- 前程无忧招聘信息数据清洗+聚类分析
- 蒲公英 · JELLY技术周刊 Vol.30: 此路不通?Vue 3 新提案 Ref-sugar
- LitJson 将json 解析为C#类
- Web 用户体验设计提升指南
- 【项目管理】需求澄清模板
热门文章
- 优秀课件笔记旅游资源和旅游地评价 Evaluation of Tourism Resources 3
- Encrypt 加密/解密
- mathtype公式中特殊符号word无法正常显示
- 让业主资源缴纳物业费-捷径智慧物业管理系统
- 【密码加密】【MD5加密】【盐值加密】
- 关于 log4j.additivity
- MATLAB R2014b 的安装破解
- Cookie/Session机制详解
- php下划线长度如何改变,如何制作固定长度下划线(输入文字而长度不变)
- 解决node.js-opensslErrorStack: [ ‘error:03000086:digital envelope routines::initialization error‘ ]错误