给定一个链表,判断链表中是否有环。

为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。

示例 1:

输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。


示例 2:

输入:head = [1,2], pos = 0
输出:true
解释:链表中有一个环,其尾部连接到第一个节点。


示例 3:

输入:head = [1], pos = -1
输出:false
解释:链表中没有环。


进阶:
你能用 O(1)(即,常量)内存解决此问题吗?

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/linked-list-cycle
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
——————————
解题思路一:建立一个哈希表,遍历链表,将每次遍历到的索引位置与已经存放在哈希表中的索引值进行比较,如果遍历到的索引已经存在于哈希表中,则表示这是一个环链表。

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {public:bool hasCycle(ListNode *head) {set<ListNode*> set;  # 建立一个哈希表while(head!=NULL)  # 一直遍历,直到遍历到列表结束{if(set.find(head)!=set.end())  # 每遍历到一个索引位置,和哈希表中已经存在的索引进行比较,如果发现重复的则表示是环链表,返回TRUEreturn 1;else  # 如果当前索引没有在哈希表中,将当前索引放进哈希表中,继续进行下一次迭代set.insert(head);head = head->next;}return 0;}
};

解题思路二:使用双指针,一个快指针每次前进两个结点,一个慢指针每次前进一个结点,如果存在环,则快指针和慢指针一定会碰上。

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {public:bool hasCycle(ListNode *head) {if(head==NULL || head->next==NULL)return 0;ListNode* slow = head;ListNode* fast = head->next;while(slow!=fast){if(fast->next==NULL || fast->next->next==NULL)return 0;slow = slow->next;fast = fast->next->next;}return 1;}
};

leetcode - 141. 环形链表(哈希表)相关推荐

  1. LeetCode 141. 环形链表 简单难度

    ** 141. 环形链表 ** 给定一个链表,判断链表中是否有环. 如果链表中存在环,则返回 true . 否则,返回 false . 解题思路(两种方法): 方法一:用集合set以及set.find ...

  2. LeetCode - 141. 环形链表

    141. 环形链表 import java.util.Objects;class ListNode {int val;ListNode next;ListNode(int x) {val = x;ne ...

  3. [Leetcode][第141、142题][JAVA][环形链表][哈希表][快慢指针][数学推理]

    [问题描述][中等] [解答思路] 141 每次遍历到一个节点时,判断该节点此前是否被访问过. 具体地,我们可以使用哈希表来存储所有已经访问过的节点.每次我们到达一个节点,如果该节点已经存在于哈希表中 ...

  4. LeetCode 141. 环形链表

    原题链接 解题思路:快慢指针,如果快指针被慢指针追上一定是环形链表 /*** Definition for singly-linked list.* struct ListNode {* int va ...

  5. leetcode 141.环形链表 I - 142.环形链表 II 代码及指针相遇证明问题

    ⭐️ 环形链表 I 题目描述 给你一个链表的头节点 head ,判断链表中是否有环.如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环. 如果链表中存在环 ,则返回 tru ...

  6. Leetcode 141.环形链表

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

  7. 32. Leetcode 141. 环形链表 (链表-双指针-环形链表)

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

  8. Leetcode 141.环形链表 (每日一题 20210617)

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

  9. [leetcode] 141.环形链表

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

最新文章

  1. 特征工程:特征生成,特征选择(三)
  2. Docker学习(3)——安装部署过程及简单应用
  3. hdu 3449 Consumer 01背包
  4. 《你的灯亮着吗》读书笔记3
  5. sublime快捷键
  6. Castle ActiveRecord学习实践(4):实现One-Many关系的映射
  7. mpc5774时钟监控寄存器_单片机如何才能不死机之内外部时钟
  8. Ribbon-2通过代码自定义配置ribbon
  9. 实体服务与虚拟服务迎来数字化发展新契机 中关村助力首都全球数字经济标杆城市建设
  10. STM32 SPI详解
  11. 【SQL】update中使用case when
  12. Waves V13全新更新 Waves V13全套音频插件 Mac版
  13. 面试之C#--垃圾回收器什么时候回收?
  14. 程序员Java代码不会写,菜鸡程序员都是怎样写代码的?
  15. 国二c语言程序设计分值分布,计算机二级分值
  16. 时间序列分析ARMA模型-学习笔记
  17. GB2312和UTF-8
  18. java物联网第三天 智慧农业物联网
  19. 微信小程序返回上一页各种方法
  20. PHP in_array 函数,解决大量数据判断in_array的效率慢,in_array 效率优化

热门文章

  1. textbox的textmode取为multiline多行时,其maxlength不起作用
  2. 在循环体中如何实现叠放效果
  3. Javascript window.fetch API
  4. 解决小程序图片在开发者工具能显示,测试时真机不显示问题
  5. Matlab策略模式
  6. 【PHP】网站防止QQ拦截防红跳转代码
  7. 【C语言】(for循环嵌套)找出1000以内的水仙花数
  8. IntelliJ IDEA上手这一篇就够了,从入门到上瘾
  9. soa面向服务体系结构_服务和面向微服务的体系结构简介
  10. javascript核心_只需几分钟即可学习这些核心JavaScript概念