LeetCode-环形链表
141. 环形链表
题目
https://leetcode-cn.com/problems/linked-list-cycle/
给你一个链表的头节点 head ,判断链表中是否有环。
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。
如果链表中存在环 ,则返回 true 。 否则,返回 false 。
题解
解法一:哈希表
思路
遍历链表,每当遍历到一个结点时,判断该结点是否存在于哈希表,
是则返回False,否则将该结点添加入哈希表中,若结点不存在,
则表明链表无环,返回True
代码
def hasCycle(self, head):
# 哈希表
hash_table = set()
while head:
if head in hash_table:
return True
else:
hash_table.add(head)
head = head.next
return False
分析
- 时间复杂度O(n)
- 空间复杂度O(n)
解法二:快慢指针
思路
若链表中存在环,快慢指针步长不一致,总有某时会相遇
(类比表盘上的时分秒针、运动场上追及问题)
代码
# 快慢指针
def hasCycle(self, head):
if not head:
return False
f = head.next
s = head
while f != s:
if not f.next or not f:
return False
else:
f = f.next.next
s = s.next
return True
分析
- 时间复杂度O(n)
- 空间复杂度O(1)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】