news 2026/6/10 12:24:54

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/6/10 9:12:27

OpenPLC Editor:免费开源PLC编程的终极解决方案

OpenPLC Editor:免费开源PLC编程的终极解决方案 【免费下载链接】OpenPLC_Editor 项目地址: https://gitcode.com/gh_mirrors/ope/OpenPLC_Editor 在工业自动化快速发展的今天,寻找一款功能强大且易于上手的PLC编程工具至关重要。OpenPLC Editor…

作者头像 李华
网站建设 2026/6/10 10:50:22

LAY-EXCEL导出插件:前端数据导出的终极解决方案

LAY-EXCEL导出插件:前端数据导出的终极解决方案 【免费下载链接】layui-excel 简单快捷的导出插件,导出仅需一句话 项目地址: https://gitcode.com/gh_mirrors/la/layui-excel 还在为繁琐的Excel导出功能而烦恼吗?传统的前端数据导出往…

作者头像 李华
网站建设 2026/6/10 10:50:40

HTML转Figma工具:打破设计与开发边界的智能转换神器

HTML转Figma工具:打破设计与开发边界的智能转换神器 【免费下载链接】figma-html Builder.io for Figma: AI generation, export to code, import from web 项目地址: https://gitcode.com/gh_mirrors/fi/figma-html 还在为网页设计稿的重建而烦恼吗&#xf…

作者头像 李华
网站建设 2026/6/9 16:26:15

嵌入式系统中Keil调试教程与传感器驱动整合

用Keil调试打通传感器驱动的“任督二脉”:从卡死到稳定的实战之路你有没有过这样的经历?代码写完,编译通过,下载进板子——然后,IC通信超时、SPI读回来全是0、温度值永远定格在0℃……想打串口日志?一加pri…

作者头像 李华
网站建设 2026/6/10 10:55:28

如何用开源工具Webcamoid让普通摄像头实现专业级视频效果?

如何用开源工具Webcamoid让普通摄像头实现专业级视频效果? 【免费下载链接】webcamoid Webcamoid is a full featured and multiplatform webcam suite. 项目地址: https://gitcode.com/gh_mirrors/we/webcamoid 你是否曾经羡慕那些视频会议中画面清晰、效果…

作者头像 李华
网站建设 2026/6/10 10:30:34

AI视频生成终极指南:从零开始的智能创作革命

AI视频生成终极指南:从零开始的智能创作革命 【免费下载链接】AI-Auto-Video-Generator An AI-powered storytelling video generator that takes user input as a story prompt, generates a story using OpenAIs GPT-3, creates images using OpenAIs DALL-E, add…

作者头像 李华