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

链表题解——环形链表【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  # 遍历结束,没有发现环

相关文章:

  • 鸿蒙Navigation路由导航-基本使用介绍
  • 书籍转圈打印矩阵(8)0604
  • 《PyTorch Hub:解锁深度学习模型的百宝箱》
  • x86 汇编逻辑运算全解析:从【位操作】到实际应用(AND,OR,NOT,XOR,TEST)
  • NeRF PyTorch 源码解读 - NDC空间
  • 6.04打卡
  • 使用 React Native 开发鸿蒙(HarmonyOS)运动健康类应用的系统化准备工作
  • Axios学习笔记
  • 《高等数学》(同济大学·第7版)第一章第七节无穷小的比较
  • 稻米分类和病害检测数据集(猫脸码客第237期)
  • Springfox 和 Knife4j 集成404 问题
  • el-input限制输入数字,输入中文后数字校验失效
  • 回归任务和分类任务损失函数详解
  • 采用 Docker GPU 部署的 Ubuntu 或者 windows 桌面环境
  • el-table 树形数据,子行数据可以异步加载
  • 录制mp4
  • 【设计模式-4.8】行为型——中介者模式
  • OPENCV重点结构体Mat的讲解
  • C语言数据结构笔记3:Union联合体+结构体取8位Bool量
  • CentOS7关闭防火墙、Linux开启关闭防火墙
  • 建设电瓶车官方网站/网络营销专业是学什么的
  • 备案 网站/东莞做网站哪家好
  • 网站建设代码上传/房产网站模板
  • 临朐网站建设咨询/宁波网站推广方式
  • 应用网站模板/资源网站优化排名优化
  • 做结构图用什么网站/chrome浏览器