【Leetcode】链表题III【python】

本文介绍了两种有效的链表环检测方法:快慢指针法和哈希表法。快慢指针法通过设置一个快指针和一个慢指针,快指针每次移动两步,慢指针每次移动一步,如果存在环,则快慢指针最终会相遇。哈希表法则是在遍历链表的过程中,使用哈希表记录已经访问过的节点,如果再次遇到相同的节点,则说明链表中存在环。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

class Solution(object):
    def hasCycle(self, head):
        """
        :type head: ListNode
        :rtype: bool
        法一:设置一个快指针,一个慢指针
        如果有环则必有fast==slow
        """
        slow=fast=head
        while slow and fast and fast.next:
            fast = fast.next.next
            slow = slow.next
            if fast is slow:
                return True
        return False
    """
    法二:设置一个nodes=set()
    同理可以用一个字典也行key:node,value:0
    hash_table = {} # key = node, value = pos
        x, pos = head, 0
        while x is not None:
            if x in hash_table:
                return True
            else:
                hash_table[x] = pos
            x = x.next
        else:
            return False
    遍历,如果有环则必有节点在node里面
    """

    def hasCycle(self, head):
        nodes = set()
        while head is not None:
            if head in nodes:
                return True
            else:
                nodes.add(head)
                head = head.next
        return False

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值