题目描述:
给你一个链表的头节点 head ,判断链表中是否有环。
如果链表中存在环 ,则返回 true 。 否则,返回 false 。
方法一:hash表
hashset是一种特殊的hashmap,可以理解为只有key的map。python语言的set(集合)自带去重功能(集合元素的唯一性)。
# 哈希表 O(m+n)
class Solution:
def hasCycle(self, head: ListNode) -> bool:
if head == None:
return False
p = head
hash_map = set()
while p.next != None:
if p in hash_map:
return True
hash_map.add(p)
p = p.next
return False
当然,也可以使用hashmap实现,如,dict的key是链表的值,dict的value是链表指向的地址,如果值相等,就判断地址是否相等,都相等才意味着出现了环。
优化:
class Solution:
def hasCycle(self, head: ListNode) -> bool:
seen = set()
while head:
if head in seen:
return True
seen.add(head)
head = head.next
return False
官方的解法中不需要判断链表为空表的情况。
<