📅  最后修改于: 2023-12-03 15:40:01.522000             🧑  作者: Mango
给定一个链表,判断链表中是否有环。
遍历链表中每个节点,将每个节点加入哈希表中。若碰到已经存在于哈希表中的节点,则说明链表中存在环。
时间复杂度:O(n)
空间复杂度:O(n)
用两个指针,一个快指针和一个慢指针。快指针每次走两个节点,慢指针每次走一个节点。若存在环,则快指针一定会追上慢指针。
时间复杂度:O(n)
空间复杂度:O(1)
方法1:哈希表
def hasCycle(head):
"""
:type head: ListNode
:rtype: bool
"""
hashmap = set()
while head:
if head in hashmap:
return True
hashmap.add(head)
head = head.next
return False
方法2:快慢指针
def hasCycle(head):
"""
:type head: ListNode
:rtype: bool
"""
if not head or not head.next:
return False
slow = head
fast = head.next
while slow != fast:
if not fast or not fast.next:
return False
slow = slow.next
fast = fast.next.next
return True
本题考察了对链表遍历和指针运用的掌握程度。在实际工作中,经常会碰到链表的相关问题,如何通过遍历和指针来解决问题是很有必要的技能。