leetcode - 141. 环形链表(哈希表)
给定一个链表,判断链表中是否有环。
为了表示给定链表中的环,我们使用整数 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. 环形链表(哈希表)相关推荐
- LeetCode 141. 环形链表 简单难度
** 141. 环形链表 ** 给定一个链表,判断链表中是否有环. 如果链表中存在环,则返回 true . 否则,返回 false . 解题思路(两种方法): 方法一:用集合set以及set.find ...
- LeetCode - 141. 环形链表
141. 环形链表 import java.util.Objects;class ListNode {int val;ListNode next;ListNode(int x) {val = x;ne ...
- [Leetcode][第141、142题][JAVA][环形链表][哈希表][快慢指针][数学推理]
[问题描述][中等] [解答思路] 141 每次遍历到一个节点时,判断该节点此前是否被访问过. 具体地,我们可以使用哈希表来存储所有已经访问过的节点.每次我们到达一个节点,如果该节点已经存在于哈希表中 ...
- LeetCode 141. 环形链表
原题链接 解题思路:快慢指针,如果快指针被慢指针追上一定是环形链表 /*** Definition for singly-linked list.* struct ListNode {* int va ...
- leetcode 141.环形链表 I - 142.环形链表 II 代码及指针相遇证明问题
⭐️ 环形链表 I 题目描述 给你一个链表的头节点 head ,判断链表中是否有环.如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环. 如果链表中存在环 ,则返回 tru ...
- Leetcode 141.环形链表
难度:简单 频率:155 题目: 给你一个链表的头节点head,判断链表中是否有环. 如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环.为了表示给定链表中的环,评测系统内部使 ...
- 32. Leetcode 141. 环形链表 (链表-双指针-环形链表)
给你一个链表的头节点 head ,判断链表中是否有环.如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环. 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表 ...
- Leetcode 141.环形链表 (每日一题 20210617)
给定一个链表,判断链表中是否有环.如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 ...
- [leetcode] 141.环形链表
给定一个链表,判断链表中是否有环. 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引 ...
最新文章
- 特征工程:特征生成,特征选择(三)
- Docker学习(3)——安装部署过程及简单应用
- hdu 3449 Consumer 01背包
- 《你的灯亮着吗》读书笔记3
- sublime快捷键
- Castle ActiveRecord学习实践(4):实现One-Many关系的映射
- mpc5774时钟监控寄存器_单片机如何才能不死机之内外部时钟
- Ribbon-2通过代码自定义配置ribbon
- 实体服务与虚拟服务迎来数字化发展新契机 中关村助力首都全球数字经济标杆城市建设
- STM32 SPI详解
- 【SQL】update中使用case when
- Waves V13全新更新 Waves V13全套音频插件 Mac版
- 面试之C#--垃圾回收器什么时候回收?
- 程序员Java代码不会写,菜鸡程序员都是怎样写代码的?
- 国二c语言程序设计分值分布,计算机二级分值
- 时间序列分析ARMA模型-学习笔记
- GB2312和UTF-8
- java物联网第三天 智慧农业物联网
- 微信小程序返回上一页各种方法
- PHP in_array 函数,解决大量数据判断in_array的效率慢,in_array 效率优化