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

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

数据结构 | 链表 | 问题 11

链表是一种数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。问题11是关于链表的一道经典问题,其题目为:

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

解题思路

问题的本质是判断一个链表是否存在环,解决这个问题可以使用两个指针,一个快指针和一个慢指针。快指针每次向前移动两个节点,慢指针每次向前移动一个节点。如果链表中存在环,那么快指针最终一定会追上慢指针。

具体的实现可以参考以下代码:

def hasCycle(head):
    """
    :type head: ListNode
    :rtype: bool
    """
    if not head or not head.next:
        return False

    slow = head
    fast = head.next

    while fast and fast.next:
        if slow == fast:
            return True
        slow = slow.next
        fast = fast.next.next

    return False
复杂度分析

此方法时间复杂度为 O(n),其中 n 为链表长度。空间复杂度为 O(1),只用了两个指针。

总结

问题11是关于链表的一道经典问题,其本质是判断一个链表是否存在环。使用快慢指针可以高效地解决此问题。