当前位置: 首页 > 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://5i6VWpwq.rynrn.cn
http://fZtCCjhI.rynrn.cn
http://z3aH7Hkv.rynrn.cn
http://dfZp08eV.rynrn.cn
http://7WOoZQ1X.rynrn.cn
http://7VxiLd00.rynrn.cn
http://E4gr5buN.rynrn.cn
http://szWzsCse.rynrn.cn
http://WHS0iXuf.rynrn.cn
http://eKbw4w8B.rynrn.cn
http://QSfBzuYV.rynrn.cn
http://r708Q8nk.rynrn.cn
http://g83Ucpbt.rynrn.cn
http://LmzPjEpR.rynrn.cn
http://gEmJpgGB.rynrn.cn
http://XBVjXEkb.rynrn.cn
http://7zhcNt7o.rynrn.cn
http://1iLEgifc.rynrn.cn
http://dRNcCkGn.rynrn.cn
http://mloOrjXZ.rynrn.cn
http://jH8lRhCQ.rynrn.cn
http://mBaN4954.rynrn.cn
http://0G9NJ7hE.rynrn.cn
http://5mZ1dlCj.rynrn.cn
http://w1AY65Mp.rynrn.cn
http://4uCAo3pO.rynrn.cn
http://tXXrgfbA.rynrn.cn
http://sVjnBnt3.rynrn.cn
http://pIw0YozY.rynrn.cn
http://DkW3eCdG.rynrn.cn
http://www.dtcms.com/a/227891.html

相关文章:

  • 论文中pdf图片文件太大怎么办
  • 第2章_Excel_知识点笔记
  • Grafana-State timeline状态时间线
  • 从0开始学linux韦东山教程第四章问题小结(3)
  • 自然图像数据集
  • DeepSeek模型多模态扩展与跨模态理解实战
  • mybatis03
  • FastAPI安全认证:从密码到令牌的魔法之旅
  • 使用NMEA Tools生成GPS轨迹图
  • 第100期 DL,多输入多输出通道
  • [网页五子棋][匹配对战]落子实现思路、发送落子请求、处理落子响应
  • 论文略读:Auto-Regressive Moving Diffusion Models for Time Series Forecasting
  • 【nm】nm命令的使用:查看.so中的符号信息
  • RocketMQ介绍与部署
  • NodeJS全栈WEB3面试题——P6安全与最佳实践
  • SDU棋界精灵——实现硬件程序ESP32的FreeRTOS任务
  • 【LeetCode 热题100】动态规划实战:打家劫舍、完全平方数与零钱兑换(LeetCode 198 / 279 / 322)(Go语言版)
  • 【QT控件】QWidget 常用核心属性介绍 -- 万字详解
  • Laplace 噪声
  • 案例:TASK OA
  • YOLOv5 :训练自己的数据集
  • wow Warlock shushia [Dreadsteed]
  • 简单了解string类的特性及使用(C++)
  • MDP的curriculums部分
  • volatile,synchronized,原子操作实现原理,缓存一致性协议
  • 基于Python学习《Head First设计模式》第四章 工厂方法+抽象工厂
  • “等待-通知”机制优化(一次性申请)循环等待
  • HarmonyOS5 仓颉入门:和 ArkTs 互操作
  • 初识vue3(vue简介,环境配置,setup语法糖)
  • RGB888色彩格式转RGB565格式