news 2026/5/11 17:21:17

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/5/9 12:44:57

中文分词神器LAC:从零开始掌握百度最强NLP工具

中文分词神器LAC:从零开始掌握百度最强NLP工具 【免费下载链接】lac 百度NLP:分词,词性标注,命名实体识别,词重要性 项目地址: https://gitcode.com/gh_mirrors/la/lac 想要快速处理中文文本却苦于分词难题&…

作者头像 李华
网站建设 2026/5/9 14:59:49

Keil uVision5安装调试工具链:嵌入式开发前置准备

Keil uVision5 安装与调试工具链配置实战指南:从零搭建嵌入式开发环境 在嵌入式系统的世界里,一个稳定、高效的开发环境是项目成功的基石。对于使用 ARM Cortex-M 系列微控制器的工程师而言, Keil uVision5(即 MDK-ARM&#xff…

作者头像 李华
网站建设 2026/5/10 9:05:13

PPO算法玩转超级马里奥兄弟终极指南:从零到精通快速上手

PPO算法玩转超级马里奥兄弟终极指南:从零到精通快速上手 【免费下载链接】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/10 1:51:48

OFD转PDF终极解决方案:Ofd2Pdf免费工具详解

随着电子发票和电子文档的普及,OFD格式文件已成为日常工作中不可或缺的一部分。然而,当我们需要将OFD文件转换为更通用的PDF格式时,往往会遇到各种技术难题。今天,我将为大家介绍一款专为解决这一问题而生的开源利器——Ofd2Pdf。…

作者头像 李华
网站建设 2026/5/10 8:31:30

GoldHEN Cheats Manager进阶指南:高效管理PS4游戏作弊功能

GoldHEN Cheats Manager进阶指南:高效管理PS4游戏作弊功能 【免费下载链接】GoldHEN_Cheat_Manager GoldHEN Cheats Manager 项目地址: https://gitcode.com/gh_mirrors/go/GoldHEN_Cheat_Manager 想要在PlayStation 4上获得更丰富的游戏体验吗?G…

作者头像 李华