news 2026/5/3 13:57:38

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/22 0:40:50

终极免费在线PPT制作工具:浏览器中的专业演示解决方案

还在为传统演示软件的繁琐操作而烦恼?PPTist为您带来了革命性的在线PPT制作体验。这款基于现代前端技术构建的Web应用,让您无需下载安装任何软件,直接在浏览器中就能创作出媲美专业级别的演示文稿。前100字内,我们已经为您展示了这…

作者头像 李华
网站建设 2026/4/23 10:00:09

TRIME输入法终极使用指南:打造你的专属安卓输入体验

TRIME(同文安卓输入法平台)是一款基于RIME输入法引擎的开源安卓输入法,支持拼音、注音、五笔、笔画等多种输入方式,让用户能够根据个人习惯打造完全自定义的输入体验。 【免费下载链接】trime 同文安卓輸入法平臺3.x/Android-rime…

作者头像 李华
网站建设 2026/5/2 17:50:04

重新定义NAS云存储:群晖百度网盘套件的创新实践

当NAS设备遇上云端存储,我们是否真的实现了数据的无缝流动?在传统观念中,本地存储与云存储往往被割裂对待,而群晖百度网盘套件的出现,正在颠覆这一认知边界。 【免费下载链接】synology-baiduNetdisk-package 项目地…

作者头像 李华
网站建设 2026/4/23 4:22:04

PPO算法终极指南:告别传统强化学习在游戏AI中的训练难题

PPO算法终极指南:告别传统强化学习在游戏AI中的训练难题 【免费下载链接】Super-mario-bros-PPO-pytorch Proximal Policy Optimization (PPO) algorithm for Super Mario Bros 项目地址: https://gitcode.com/gh_mirrors/su/Super-mario-bros-PPO-pytorch 在…

作者头像 李华
网站建设 2026/5/3 12:37:27

简单快速的Protobuf数据解析指南:无需.proto文件也能轻松搞定

简单快速的Protobuf数据解析指南:无需.proto文件也能轻松搞定 【免费下载链接】protobuf_decoder 项目地址: https://gitcode.com/gh_mirrors/pr/protobuf_decoder Protobuf-decoder是一款功能强大的开源工具,专门解决在没有.proto定义文件的情况…

作者头像 李华
网站建设 2026/5/1 8:45:49

智能打卡革命:企业微信远程考勤的终极解决方案

智能打卡革命:企业微信远程考勤的终极解决方案 【免费下载链接】weworkhook 企业微信打卡助手,在Android设备上安装Xposed后hook企业微信获取GPS的参数达到修改定位的目的。注意运行环境仅支持Android设备且已经ROOTXposed框架 (未 ROOT 设备…

作者头像 李华