news 2026/4/18 11:25:21

hot100 234.回文链表

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
hot100 234.回文链表

思路:

1.先考虑怎么判断一个字符串是不是回文字符串。可以从最左最右开始,比较第一个字母和最后一个字母是不是一样的,如果第一个字母和最后一个字母是一样的,那么就继续比较第二个字母和倒数第二个字母,以此类推。

2.如何快速找到链表的最后一个节点、倒数第二个节点、倒数第三个节点......?

3.首先可以找到链表的中间节点:

(1)如果链表有奇数个节点,就找正中间的节点。

(2)如果链表有偶数个节点,就找正中间右边的节点。

4.然后把中间节点到链表末尾反转,如上图所示,反转后得到链表6->5->4,其头节点记作head2,这样就能从head2开始,依次访问原链表的最后一个节点、倒数第二个节点、倒数第三个节点...。

5.最后,同时遍历head和head2这两个链表,每次循环判断head.val是否等于head2.val,若不相等,则返回false。循环直到head2链表遍历结束,如果循环中没有返回false,则说明链表是回文的,返回true。

6.注意:

(1)第一张图中的2->3,在反转链表后,并不会断开。第一张图反转链表后,我们得到了两条链表:一条是1->2->3,另一条是5->4->3。

(2)第二张图中的3->4,在反转链表后,并不会断开。第二张图反转链表后,我们得到了两条链表:一条是1->2->3->4,另一条是6->5->4。这意味着代码在写循环的时候,循环条件要判断head2是否为空而不是head是否为空,否则会错误地多循环一次,导致访问head2.val出现空指针异常。

7.问:为什么不反转整个链表,这样也可以访问原链表的最后一个节点、倒数第二个节点、倒数第三个节点......?

答:

因为还要从head开始遍历链表,访问原链表的第一个节点、第二个节点、第三个节点......。如果反转整个链表,那么链表前半段的结构就被破坏了。

8.复杂度分析:

(1)时间复杂度:O(n),其中n是链表的长度(节点个数)。

(2)空间复杂度:O(1)。

附代码:

class Solution { public boolean isPalindrome(ListNode head) { ListNode mid = middleNode(head); ListNode head2 = reverseList(mid); while(head2 != null){ if(head.val != head2.val){ // 不是回文链表 return false; } head = head.next; head2 = head2.next; } return true; } //求链表的中间节点 //快慢指针法,对于无环链表,可让快指针每次走两步,慢指针每次走一步,当快指针走到结尾处时慢指针到达中间节点 private ListNode middleNode(ListNode head){ ListNode slow = head; ListNode fast = head; while(fast != null && fast.next != null){ slow = slow.next; fast = fast.next.next; } return slow; } //反转链表 private ListNode reverseList(ListNode head){ ListNode pre = null; ListNode cur = head; while(cur != null){ ListNode tmp = cur.next; cur.next = pre; pre = cur; cur = tmp; } return pre; } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 3:50:28

I2C读写EEPROM代码性能优化:批量读写操作实战案例

I2C读写EEPROM性能优化实战:如何用批量操作榨干通信效率?你有没有遇到过这样的场景?系统明明设计得很紧凑,传感器采样、数据处理都跑得飞快,结果一到往EEPROM里存个配置参数,整个流程就“卡”一下——不是代…

作者头像 李华
网站建设 2026/4/18 3:49:40

MediaPipe tasks_vision模块终极构建指南:从源码到AAR的完整流程

MediaPipe tasks_vision模块终极构建指南:从源码到AAR的完整流程 【免费下载链接】mediapipe Cross-platform, customizable ML solutions for live and streaming media. 项目地址: https://gitcode.com/gh_mirrors/me/mediapipe 你是否曾经想要深度定制Med…

作者头像 李华
网站建设 2026/4/18 3:46:58

EPPlus 8.0.1:解决企业级Excel处理痛点的.NET利器

EPPlus 8.0.1:解决企业级Excel处理痛点的.NET利器 【免费下载链接】EPPlus EPPlus-Excel spreadsheets for .NET 项目地址: https://gitcode.com/gh_mirrors/epp/EPPlus 在当今数据驱动的商业环境中,Excel文件处理已成为企业应用中不可或缺的一环…

作者头像 李华
网站建设 2026/4/17 12:20:03

TouchGal终极指南:快速掌握Galgame社区完整使用技巧

TouchGal终极指南:快速掌握Galgame社区完整使用技巧 【免费下载链接】kun-touchgal-next TouchGAL是立足于分享快乐的一站式Galgame文化社区, 为Gal爱好者提供一片净土! 项目地址: https://gitcode.com/gh_mirrors/ku/kun-touchgal-next 你是否曾经在寻找心仪…

作者头像 李华
网站建设 2026/4/12 18:32:25

WSA Pacman:告别命令行,轻松管理Windows安卓应用

WSA Pacman:告别命令行,轻松管理Windows安卓应用 【免费下载链接】wsa_pacman A GUI package manager and package installer for Windows Subsystem for Android (WSA) 项目地址: https://gitcode.com/gh_mirrors/ws/wsa_pacman 还在为Windows S…

作者头像 李华
网站建设 2026/4/18 5:37:34

UE4SS完整入门指南:从零开始掌握虚幻引擎脚本系统

UE4SS完整入门指南:从零开始掌握虚幻引擎脚本系统 【免费下载链接】RE-UE4SS Injectable LUA scripting system, SDK generator, live property editor and other dumping utilities for UE4/5 games 项目地址: https://gitcode.com/gh_mirrors/re/RE-UE4SS …

作者头像 李华