leetcood学习笔记-141-环形列表

博客介绍了判断元素的几种方法,法二判断元素是否在集合中复杂度为O(1),法三指针追逐复杂度为O(n)和O(1),还给出了转载链接。

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

题目描述:

方法一:

class Solution(object):
    def hasCycle(self, head):
        """
        :type head: ListNode
        :rtype: bool
        """
        while head:
            if head.val == "daafas":
                return True
            else:
                head.val = "daafas":
            head = head.next
        return False

 

法二:判断某个元素是否在集合中只有O(1),

class Solution(object):
    def hasCycle(self, head):
        """
        :type head: ListNode
        :rtype: bool
        """
        save = set()
        cur = head 
        while cur is not None:
            if cur in save:
                return True
            else:
                save.add(cur)
                cur = cur.next
        return False 

 法三:指针追逐: O(n),O(1)

class Solution(object):
    def hasCycle(self, head):
        """
        :type head: ListNode
        :rtype: bool
        """
        if not head or not head.next :
            return False
        a,b = head,head.next
        while a!=b:
            if  b == None or b.next == None:
                return False
            else:
                a = a.next
                b = b.next.next
        return True
        // 找环节点的方法:
        // slow 走过 k 步,slow 的情人 fast 走过 2k 步他们在巴厘岛邂逅。
        // 意味着 slow 再走 k 步,一定又会回到巴厘岛。
        // slow 从巴厘岛出发,slow 的老公 green 先生从起点出发,两人同时走 k 步,最终会在巴厘岛相遇。这样就找到了环节点。
        // 我们并不关心 k 的值是多少,因为他们一定会在巴厘岛相遇。

 

转载于:https://www.cnblogs.com/oldby/p/10554364.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值