题目要求

原题目链接: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. 环形链表判断链表是否有环相关推荐

  1. 链表--判断链表中是否有环

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

  2. 【Java】环形链表 ( 给定一个链表,判断链表中是否有环)

    题目描述 :给你一个链表的头节点 head ,判断链表中是否有环. 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环. 为了表示给定链表中的环,评测系统内部使用整数 po ...

  3. 判断链表中是否有环(环形链表)

    题意: 给定一个链表,判断链表中是否有环. 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位 ...

  4. 双指针算法之快慢指针(一):力扣【判断链表是否有环】leetcode-141、142

    一.简介:什么是快慢指针? 快慢指针,顾名思义,无非就是设置一个快指针,一个慢指针,初始化的时候,快指针和慢指针都指向链表的头结点,前进的时候一个在前一个在后,结合起来可以十分巧妙的解决链表中的一些问 ...

  5. LeetCode141:判断链表是否有环

    题目描述: 给你一个链表的头节点 head ,判断链表中是否有环. 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环. 为了表示给定链表中的环,评测系统内部使用整数 po ...

  6. 环形链表。给定一个链表,判断链表中是否有环。(GO、PHP)

    给定一个链表,判断链表中是否有环. 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引 ...

  7. leetcode141. 环形链表

    leetcode141. 环形链表 题目描述 链接: leetcode141. 给定一个链表,判断链表中是否有环. 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环. 为 ...

  8. 漫画算法:如何判断链表有环?

    大四毕业前夕,计算机学院, 正在四处求职的小灰碰到了同系的学霸大黄...... 小灰边说边回忆着上周去面试的情形...... 有一个单向链表,链表当中有可能出现"环",就像下图这样 ...

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

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

最新文章

  1. 11年瑞纳手动挡值多少钱_三分钟让你知道手中的松石值多少钱
  2. ModuleNotFoundError: No module named ‘config‘
  3. 初学Java Web(7)——文件的上传和下载
  4. 类模板非类型形参实现Stack
  5. C++相关:动态内存和智能指针
  6. 重学数据结构004——栈的基本操作及实现(数组实现)
  7. 动手造轮子:实现一个简单的依赖注入(零)
  8. php 身份认证服务,PHP的HTTP身份认证
  9. 面试准备-Shell脚本
  10. Python 资源库大全
  11. 嵌入式系统TinyOS学习资源
  12. 黑盒测试--等价类划分
  13. yuzu模拟器linux,yuzu模拟器使用教程 yuzu模拟器手机版下载
  14. 浅谈同构类问题的骗分算法
  15. Linux 下屏幕旋转
  16. 前程无忧招聘信息数据清洗+聚类分析
  17. 蒲公英 · JELLY技术周刊 Vol.30: 此路不通?Vue 3 新提案 Ref-sugar
  18. LitJson 将json 解析为C#类
  19. Web 用户体验设计提升指南
  20. 【项目管理】需求澄清模板

热门文章

  1. 优秀课件笔记旅游资源和旅游地评价 Evaluation of Tourism Resources 3
  2. Encrypt 加密/解密
  3. mathtype公式中特殊符号word无法正常显示
  4. 让业主资源缴纳物业费-捷径智慧物业管理系统
  5. 【密码加密】【MD5加密】【盐值加密】
  6. 关于 log4j.additivity
  7. MATLAB R2014b 的安装破解
  8. Cookie/Session机制详解
  9. php下划线长度如何改变,如何制作固定长度下划线(输入文字而长度不变)
  10. 解决node.js-opensslErrorStack: [ ‘error:03000086:digital envelope routines::initialization error‘ ]错误