当前位置: 首页 > article >正文

链表题解——环形链表【LeetCode】

141. 环形链表

方法一

  • 核心思想

    • 使用一个集合 seen 来记录已经访问过的节点。
    • 遍历链表,如果当前节点已经存在于集合中,说明链表存在环;否则,将当前节点添加到集合中,继续遍历。
    • 如果遍历结束(head 为 None),说明链表没有环。
  • 时间复杂度

    • 最坏情况下需要遍历整个链表,时间复杂度为 O(n),其中 n 是链表的节点数。
  • 空间复杂度

    • 使用了一个集合 seen 来存储节点,空间复杂度为 O(n)
# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = Noneclass Solution(object):def hasCycle(self, head):""":type head: ListNode:rtype: bool"""seen = set()while head:if head in seen:return Trueseen.add(head)head = head.nextreturn False

方法二

  • 快慢指针的核心思想

    • 快指针每次移动两步,慢指针每次移动一步。
    • 如果链表存在环,快指针最终会追上慢指针(相遇)。
    • 如果链表不存在环,快指针会先到达链表末尾。
  • 时间复杂度O(n)

  • 空间复杂度O(1)

def hasCycle(self, head):slow = fast = head  # 初始化慢指针和快指针,都指向链表头节点while fast and fast.next:  # 当快指针及其下一个节点不为空时slow = slow.next  # 慢指针每次移动一步fast = fast.next.next  # 快指针每次移动两步if slow == fast:  # 如果快慢指针相遇return True  # 说明链表存在环return False  # 遍历结束,没有发现环
http://www.lryc.cn/news/2404712.html

相关文章:

  • Cell-o1:强化学习训练LLM解决单细胞推理问题
  • 求解插值多项式及其余项表达式
  • vue3: bingmap using typescript
  • vue3前端实现导出Excel功能
  • 超大规模芯片验证:基于AMD VP1902的S8-100原型验证系统实测性能翻倍
  • 【工作记录】接口功能测试总结
  • Dubbo Logback 远程调用携带traceid
  • 【element-ui】el-autocomplete实现 无数据匹配
  • NLP学习路线图(二十):FastText
  • 力扣面试150题--除法求值
  • SQL进阶之旅 Day 20:锁与并发控制技巧
  • 美业破局:AI智能体如何用数据重塑战略决策(5/6)
  • 生成模型+两种机器学习范式
  • 【学习笔记】Python金融基础
  • 在Linux查看电脑的GPU型号
  • A Execllent Software Project Review and Solutions
  • windows命令行面板升级Git版本
  • Langgraph实战--自定义embeding
  • 大故障,阿里云核心域名疑似被劫持
  • 什么是「镜像」?(Docker Image)
  • SQLMesh实战:用虚拟数据环境和自动化测试重新定义数据工程
  • 服务器健康摩尔斯电码:深度解读S0-S5状态指示灯
  • 设计模式基础概念(行为模式):模板方法模式 (Template Method)
  • 传统业务对接AI-AI编程框架-Rasa的业务应用实战(番外篇2)-- Rasa 训练数据文件的清理
  • LVDS的几个关键电压概念
  • 2023年ASOC SCI2区TOP,随机跟随蚁群优化算法RFACO,深度解析+性能实测
  • DLL动态库实现文件遍历功能(Windows编程)
  • Java Map完全指南:从基础到高级应用
  • jvm 垃圾收集算法 详解
  • [特殊字符] 深入理解 Linux 内核进程管理:架构、核心函数与调度机制