LeetCode-环形链表

141. 环形链表

题目

https://leetcode-cn.com/problems/linked-list-cycle/

给你一个链表的头节点 head ,判断链表中是否有环。
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。
如果链表中存在环 ,则返回 true 。 否则,返回 false

题解

解法一:哈希表

思路

遍历链表,每当遍历到一个结点时,判断该结点是否存在于哈希表,
是则返回False,否则将该结点添加入哈希表中,若结点不存在,
则表明链表无环,返回True

代码

    def hasCycle(self, head):
        # 哈希表
        hash_table = set()
        while head:
            if head in hash_table:
                return True
            else:
                hash_table.add(head)
                head = head.next
        return False

分析

  • 时间复杂度O(n)
  • 空间复杂度O(n)

解法二:快慢指针

思路

若链表中存在环,快慢指针步长不一致,总有某时会相遇
(类比表盘上的时分秒针、运动场上追及问题)

代码

    # 快慢指针
    def hasCycle(self, head):
        if not head:
            return False
        f = head.next
        s = head
        while f != s:
            if not f.next or not f:
                return False
            else:
                f = f.next.next
                s = s.next
        return True

分析

  • 时间复杂度O(n)
  • 空间复杂度O(1)
posted @   SD_ZYL  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示