尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
力扣(回文链表)
解析 LeetCode 234. 回文链表快慢指针 后半段反转一、题目分析一问题定义给定一个单链表的头节点 head判断该链表是否为回文链表。例如 head [1,2,2,1] 返回 true。head [1,2] 返回 false。链表节点数范围是 1 到 10^5值为整数要求空间复杂度 O(1)。二核心挑战效率要求必须 O(n) 时间 O(1) 额外空间排除转数组、递归栈、哈希表等方案。结构适配单链表无法倒序遍历需通过反转局部子链实现双向比对但反转会破坏原结构必须精准控制断链与恢复时机。二、算法思路快慢指针找中点 反转后半段一奇偶长度下慢指针终止位置差异奇数长度如 5 个节点慢指针停在正中节点第 3 个后半段从 next 开始即第 4 个。偶数长度如 4 个节点慢指针停在前半段末尾第 2 个后半段从 next 开始即第 3 个。统一处理快指针走完时慢指针刚好落在后半段起始位置的前一个所以后半段头 slow.next。二反转后半段时断链与恢复的时机断链时机找到后半段头后立即将 slow.next 置为 null切断前后两段避免比对时误连。恢复时机比对完成后将已反转的后半段再次反转再接回 slow.next还原原始链表结构。关键细节反转操作本身不依赖原链表后续断链后可安全反转。恢复只需对反转后的子链再做一次反转即可。三、代码实现与详细解析publicclassSolution{publicbooleanisPalindrome(ListNodehead){if(headnull||head.nextnull){returntrue;}// 快慢指针初始化slow 和 fast 都从 head 出发ListNodeslowhead;ListNodefasthead;// 移动快慢指针fast 走两步slow 走一步直到 fast 到达末尾// 奇数长度时 fast 停在 tail偶数时停在 tail.nextnullwhile(fast.next!nullfast.next.next!null){slowslow.next;fastfast.next.next;}// 此时 slow 停在前半段末尾后半段头是 slow.nextListNodesecondHalfHeadslow.next;// 断链切断前半段和后半段的连接避免比对干扰slow.nextnull;// 反转后半段链表得到新头节点 reversedSecondHalfListNodereversedSecondHalfreverseList(secondHalfHead);// 初始化两个指针分别从前半段头和反转后的后半段头开始比对ListNodep1head;ListNodep2reversedSecondHalf;booleanisPalintrue;// 逐节点比对p1 和 p2 同时前进值不同则不是回文while(p1!nullp2!null){if(p1.val!p2.val){isPalinfalse;break;}p1p1.next;p2p2.next;}// 恢复链表将已反转的后半段再次反转接回 slow.nextslow.nextreverseList(reversedSecondHalf);returnisPalin;}// 辅助函数反转链表返回新头节点privateListNodereverseList(ListNodehead){ListNodeprevnull;ListNodecurrhead;// 遍历原链表逐个将 curr 指向 prev实现反转while(curr!null){ListNodenextTempcurr.next;// 保存下一个节点防止断链丢失curr.nextprev;// 当前节点指向前面节点prevcurr;// prev 前移一位currnextTemp;// curr 前移一位}returnprev;// prev 是新头节点}}一代码流程拆解初始化 处理空链表或单节点情况直接返回 true。设置 slow 和 fast 均指向 head。快慢指针移动 fast 每次走两步slow 每次走一步循环条件是 fast.next 和 fast.next.next 都非空确保 fast 不越界。定位后半段头 循环结束时 slow 停在前半段末尾secondHalfHead slow.next 即为后半段起点。断链操作 将 slow.next 置 null彻底分离前后两段。反转后半段 调用 reverseList 得到反转后的后半段头节点。双指针比对 p1 从前半段头出发p2 从反转后半段头出发同步前进比对值任一不等即返回 false。恢复链表 对已反转的后半段再调用 reverseList结果接回 slow.next还原原始结构。返回结果 比对全程相等则返回 true否则 false。二关键逻辑解析断链时机快慢指针停稳后立刻执行 slow.next null否则比对时 p2 可能顺着原链表继续走到前半段造成错误匹配。例如 [1,2,3,2,1] 中若不断链p2 从 3 开始反转后为 [1,2,3]但未断链时仍连着 2→1比对会混乱。恢复必要性题目虽未要求保持原链表但实际工程中修改输入结构需谨慎且部分 OJ 测试用例会复用链表恢复可避免副作用。奇偶统一性无论长度奇偶slow 停点都是后半段起始的前一个所以 secondHalfHead slow.next 恒成立无需分支判断。四、复杂度分析一时间复杂度O(n)其中 n 是链表长度。快慢指针遍历约 n/2 次反转后半段约 n/2 次比对最多 n/2 次恢复反转又 n/2 次总和为 O(n)。二空间复杂度O(1)只使用了 slow、fast、p1、p2、prev、curr 等常数个指针变量无递归栈、无额外容器。
RELATED

相关推荐

瑞昱发布 Wi-Fi R-NAT 解决方案:在 RTOS SoC 原生实现三层路由与独立组网

瑞昱发布 Wi-Fi R-NAT 解决方案:在 RTOS SoC 原生实现三层路由与独立组网

速览|R‑NAT 核心价值 单芯片独立组网:在 RTOS SoC 上原生实现 NAT 转发、DHCP 服务与 DNS 代理等局域网基础服务 多接口一体化:支持 Wi‑Fi、以太网、USB ECM 等多接口统一管理,WAN / LAN 角色可灵活配置 更稳的链路体验&#…

📅 2026/10/7 16:38:43
Claude Code 的国产平替?AtomCode 功能解读与新手入门教程

Claude Code 的国产平替?AtomCode 功能解读与新手入门教程

写在前面为什么要了解 AtomCode?AtomCode 核心定位与功能特点新手快速上手指南4.1 系统要求4.2 安装方法(任选一种)4.3 验证安装4.4 首次运行写在前面 AI 编程,简单来说就是利用人工智能技术辅助编写代码、甚至主导软件开发的过程…

📅 2026/10/6 11:30:42
上海实力型EMBA选校避坑FAQ、核心判断维度全解析,附上海交大高金教育背景梳理

上海实力型EMBA选校避坑FAQ、核心判断维度全解析,附上海交大高金教育背景梳理

一、理解“上海实力型EMBA”的核心判断维度 对于目标人群而言,判断上海实力型EMBA的核心维度可从五大方向梳理,所有维度均基于客观办学标准,无主观宣传导向:办学的权威性与合规性:需获得国际公认的商学院认证&#xff…

📅 2026/9/15 14:48:29
MORE NEWS

更多资讯

📰

二维瓦片的相关概念

概念 正射影像 正射影像是一种经过几何纠正(比如使之拥有统一的比例尺)的航摄像片,与没有纠正过的航摄像片不同的是,人们可以使用正射影像量测实际距离,因为它是通过校正透视变形后得到的地球表面的真实描述。 与传统…

📰

CAN 技术系列 07 · CAN 高层协议

📚 CAN总线技术系列 持续更新中 本系列从差分电气层一路打到 Linux SocketCAN,把"两根线"背后的电气/协议/控制器/驱动/实战全拧成一根线。 👉 想系统追更,戳这里查看完整专栏: 【CAN 技术系列】 👉 其他技…

📰

线规对了为什么还压不好?端子压接范围、绝缘外径与拉脱力匹配

端子与线材匹配,看三件事:导体截面落在端子线规范围内、绝缘外径落在允许范围内、压接高度在规格书公差内。 只对 AWG 不够:同一 AWG 可以有不同导体结构,同一线规也可以配不同绝缘厚度,压出来的结果完全不同。拉脱力是…

📰

CAN 技术系列 06 · CAN 错误处理与错误帧

📚 CAN总线技术系列 持续更新中 本系列从差分电气层一路打到 Linux SocketCAN,把"两根线"背后的电气/协议/控制器/驱动/实战全拧成一根线。 👉 想系统追更,戳这里查看完整专栏: 【CAN 技术系列】 👉 其他技…

📰

导师退回问题清单:论文从开题到定稿,AI 工具到底该怎么选、怎么用

每年审本科和硕士论文,我退稿最集中的其实不是“选题不够宏大”,而是三类很具体的问题: 格式不达标——目录、页眉、参考文献著录格式跟学校模板对不上,图表编号混乱;引用和数据经不起查——参考文献像编的&#xff0c…

📰

OpenStack 计算管理:实例锁定后被普通用户解锁了?避坑实操

给实例上了锁,转身普通用户登录就把锁解了、机删了——这不是 bug,是 policy.json 里 unlock 那条规则默认对 owner 开放。这篇把计算管理走一遍完整闭环:主机聚合与可用分区、规格的 Public/Private、密钥对与服务器组、发放实例&#xff0c…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬