LeetCode题目(Python实现):环形链表

题目

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

为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos-1,则在该链表中没有环。

示例1 :

输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。

在这里插入图片描述
示例2 :

输入:head = [1,2], pos = 0
输出:true
解释:链表中有一个环,其尾部连接到第一个节点。

在这里插入图片描述
示例3 :

输入:head = [1], pos = -1
输出:false
解释:链表中没有环。

在这里插入图片描述

自己的想法

算法实现

class Solution:
    def hasCycle(self, head: ListNode) -> bool:
        if not (head and head.next):
            return False
        slow = head
        fast = head.next
        while fast.next and fast.next.next:
            if slow == fast:
                return True
            slow = slow.next
            fast = fast.next.next
        return False

执行结果

执行结果 : 通过
执行用时 : 52 ms, 在所有 Python3 提交中击败了77.58%的用户
内存消耗 : 16.8 MB, 在所有 Python3 提交中击败了19.14%的用户
在这里插入图片描述

复杂度分析

  • 时间复杂度:O(n),
    我们只遍历了包含有 n 个元素的列表一次。

  • 空间复杂度:O(1)

哈希表法

class Solution:
    def hasCycle(self, head: ListNode) -> bool:
        if head == None:
            return False

        target = {head}
        head = head.next
        while head:
            if head in target:
                return True
            else:
                target.add(head)
                head = head.next
        return False

执行结果

在这里插入图片描述

复杂度分析

  • 时间复杂度:O(n),
    我们只遍历了包含有 n 个元素的链表一次。

  • 空间复杂度:O(n),
    所需的额外空间取决于哈希表中存储的元素数量,该表最多需要存储 n 个元素。

小结

先按照自己的想法设计,用快慢指针的方法,当快指针和慢指针相遇时,说明有环,否则快指针会到达尾部从而跳出循环。之后学习了哈希表法,通过建立字典,一边遍历链表,一边查找并将节点加入字典中,由于哈希表查找时间复杂度低,所以会快很多。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值