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

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

数据结构 | 链表 | 问题 14

问题描述

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

解决思路

可以使用快慢指针,快指针每次向前移动两个节点,慢指针每次向前移动一个节点,当快指针追上慢指针时,就表示链表中有环。

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

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def hasCycle(head: ListNode) -> 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

以上代码中,首先判断链表头是否为空或者只有一个节点,如果是则直接返回 False。

然后设置两个指针,slow 指向头结点,fast 指向头结点的下一个节点。在循环中,如果 fast 或 fast.next 为空,表示链表没有环,返回 False;如果 fast 追上了 slow,表示链表中有环,返回 True;否则继续循环。