📜  数据结构|链表|问题7(1)

📅  最后修改于: 2023-12-03 15:40:01.522000             🧑  作者: Mango

数据结构-链表-问题7
问题描述

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

解决方法

方法1:哈希表

遍历链表中每个节点,将每个节点加入哈希表中。若碰到已经存在于哈希表中的节点,则说明链表中存在环。

时间复杂度:O(n)

空间复杂度:O(n)

方法2:快慢指针

用两个指针,一个快指针和一个慢指针。快指针每次走两个节点,慢指针每次走一个节点。若存在环,则快指针一定会追上慢指针。

时间复杂度: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
总结

本题考察了对链表遍历和指针运用的掌握程度。在实际工作中,经常会碰到链表的相关问题,如何通过遍历和指针来解决问题是很有必要的技能。