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

​链表题解——回文链表【LeetCode】

 算法思路

  1. 核心思想

    • 找到链表的中间节点。
    • 反转链表的后半部分。
    • 比较链表的前半部分和反转后的后半部分,如果值完全一致,则是回文链表。
  2. 具体步骤

    • 使用快慢指针找到链表的中间节点(middleNode 方法)。
    • 反转链表的后半部分(reverseList 方法)。
    • 比较链表的前半部分和反转后的后半部分,如果所有节点的值都相等,则返回 True,否则返回 False
  3. 关键点

    • 快慢指针找到中间节点的时间复杂度为 O(n)
    • 反转链表的时间复杂度为 O(n)
    • 比较链表的时间复杂度为 O(n)
    • 总时间复杂度为 O(n),空间复杂度为 O(1)
class ListNode:def __init__(self, x):self.val = x  # 初始化节点的值self.next = None  # 初始化节点的下一个节点为 Noneclass Solution:# 876. 链表的中间结点def middleNode(self, head):slow = fast = head  # 初始化慢指针和快指针,都指向链表头节点while fast and fast.next:  # 当快指针及其下一个节点不为空时slow = slow.next  # 慢指针每次移动一步fast = fast.next.next  # 快指针每次移动两步return slow  # 返回慢指针指向的节点(即链表的中间节点)# 206. 反转链表def reverseList(self, head):pre, cur = None, head  # 初始化前驱节点为 None,当前节点为链表头节点while cur:  # 当当前节点不为空时nxt = cur.next  # 保存当前节点的下一个节点cur.next = pre  # 将当前节点的 next 指向前驱节点pre = cur  # 前驱节点移动到当前节点cur = nxt  # 当前节点移动到下一个节点return pre  # 返回反转后的链表头节点def isPalindrome(self, head):mid = self.middleNode(head)  # 找到链表的中间节点head2 = self.reverseList(mid)  # 反转后半部分链表while head2:  # 遍历反转后的后半部分链表if head.val != head2.val:  # 如果前半部分和后半部分的节点值不相等return False  # 不是回文链表,返回 Falsehead = head.next  # 移动前半部分的指针head2 = head2.next  # 移动后半部分的指针return True  # 所有节点值都相等,是回文链表,返回 True
http://www.lqws.cn/news/103519.html

相关文章:

  • Java基础 Day28 完结篇
  • 使用 Golang `testing/quick` 包进行高效随机测试的实战指南
  • Elasticsearch集群最大分片数设置详解:从问题到解决方案
  • Mac电脑_钥匙串操作选项变灰的情况下如何删除?
  • React-native之Flexbox
  • 相机Camera日志分析之二十四:高通相机Camx 基于预览1帧的process_capture_request三级日志分析详解
  • torch.distributed.launch 、 torchrun 和 torch.distributed.run 无法与 nohup 兼容
  • Redis:常用数据结构 单线程模型
  • 【Typst】3.Typst脚本语法
  • 使用Redis作为缓存优化ElasticSearch读写性能
  • AutoGenTestCase - 借助AI大模型生成测试用例
  • 批量大数据并发处理中的内存安全与高效调度设计(以Qt为例)
  • 基于Matlab实现LDA算法
  • MySQL 全量、增量备份与恢复
  • 医疗内窥镜影像工作站技术方案(续)——EFISH-SCB-RK3588国产化替代技术深化解析
  • Linux 命令全讲解:从基础操作到高级运维的实战指南
  • Python实例题:Flask实现简单聊天室
  • SIFT 算法原理详解
  • 户外摄像头监控如何兼顾安全实时监控
  • 深度学习与特征交叉:揭秘FNN与SNN在点击率预测中的应用
  • 电工基础【4】点动接线实操
  • 【电力电子】什么是并网?为什么要并网?并网需要考虑哪些因素?
  • matlab实现求解兰伯特问题
  • 华为OD机试_2025 B卷_精准核酸检测(Python,100分)(附详细解题思路)
  • 相机camera开发之差异对比核查一:测试机和对比机的硬件配置差异对比
  • Linux随记(十八)
  • 我的技术笔记
  • Docker部署与应用、指令
  • Linux——初步认识Shell、深刻理解Linux权限
  • Windows下WSL(Ubuntu)安装1Panel