登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
1
2
/ 2 页
下一页
返回列表
首页
›
业界区
›
科技
›
【忍者算法】从生活场景到回文链表:探索对称性检测|Le ...
【忍者算法】从生活场景到回文链表:探索对称性检测|LeetCode 234 回文链表
[ 复制链接 ]
辈霖利
2025-6-7 11:03:49
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
从生活场景到回文链表:探索对称性检测
生活中的回文现象
在日常生活中,回文无处不在。比如"上海自来水来自海上"、"12321"这样正着读和倒着读都一样的字符串或数字,就是回文。把这个概念扩展到链表,我们就得到了今天要讨论的回文链表问题:一个链表从前往后读和从后往前读的结果是否相同。
问题描述
LeetCode第234题"回文链表"要求:给你一个单链表的头节点 head,请判断该链表是否为回文链表。
例如:
输入:1 → 2 → 2 → 1
输出:true
输入:1 → 2 → 3 → 2 → 1
输出:true
输入:1 → 2 → 3 → 3 → 1
输出:false
复制代码
基础知识准备
这道题的核心是利用我们之前学过的"反转链表"。如果不熟悉链表反转,建议先复习上一篇文章。记住,链表反转是一块基石,在这里我们要用它来解决更复杂的问题。
直观解法:转换为数组
最简单的想法是:把链表转换成数组,然后用双指针从两端向中间移动比较。这就像把一摞扑克牌摊开在桌上,从两端开始对比每张牌是否相同。
数组法实现
public boolean isPalindrome(ListNode head) {
List<Integer> vals = new ArrayList<>();
// 将链表值复制到数组中
ListNode current = head;
while (current != null) {
vals.add(current.val);
current = current.next;
}
// 使用双指针判断是否回文
int left = 0, right = vals.size() - 1;
while (left < right) {
if (!vals.get(left).equals(vals.get(right))) {
return false;
}
left++;
right--;
}
return true;
}
复制代码
优化解法:反转后半部分
仔细思考,我们其实不需要额外的数组。可以用这个巧妙的方法:
找到链表中点
反转后半部分
比较前后两半是否相同
(可选)恢复链表原状
这就像把一叠纸牌分成两半,把后半部分倒过来,然后一张张对比。
寻找中点:快慢指针法
想象两个人在跑道上跑步,一个速度是另一个的两倍。当快跑者跑到终点时,慢跑者正好在中点!
详细代码实现
public boolean isPalindrome(ListNode head) {
if (head == null || head.next == null) {
return true;
}
// 第1步:找到中点
ListNode slow = head;
ListNode fast = head;
while (fast.next != null && fast.next.next != null) {
slow = slow.next;
fast = fast.next.next;
}
// 第2步:反转后半部分
ListNode secondHalf = reverseList(slow.next);
// 第3步:比较两半是否相同
ListNode firstHalf = head;
ListNode temp = secondHalf; // 保存开始位置,用于之后恢复
boolean result = true;
while (secondHalf != null) {
if (firstHalf.val != secondHalf.val) {
result = false;
break;
}
firstHalf = firstHalf.next;
secondHalf = secondHalf.next;
}
// 第4步:恢复链表(可选)
slow.next = reverseList(temp);
return result;
}
// 链表反转函数(使用我们之前学过的方法)
private ListNode reverseList(ListNode head) {
ListNode prev = null;
ListNode curr = head;
while (curr != null) {
ListNode nextTemp = curr.next;
curr.next = prev;
prev = curr;
curr = nextTemp;
}
return prev;
}
复制代码
图解过程
以1→2→3→2→1为例:
1) 初始状态:
1 → 2 → 3 → 2 → 1
2) 找到中点:
1 → 2 → [3] → 2 → 1
slow指向3
3) 反转后半部分:
1 → 2 → 3 ← 2 ← 1
4) 比较两半:
(1 → 2) 和 (1 → 2) 比较
5) 恢复原状:
1 → 2 → 3 → 2 → 1
复制代码
复杂度分析
空间优化解法:
时间复杂度:O(n)
空间复杂度:O(1),只使用几个指针
优点:空间效率高,且思路优雅
缺点:修改了原链表结构(虽然最后恢复了)
重要思维方式总结
问题转化
:将回文判断转化为对称性比较
空间优化思维
:
不用额外数组存储
利用原有空间进行操作
分步思想
:
找中点(快慢指针)
反转后半段(链表反转)
对比(双指针)
恢复(再次反转)
边界处理
:
空链表
单节点链表
偶数/奇数长度的处理
实用技巧总结
解决类似问题的关键点:
熟练掌握基础操作(如链表反转)
善用快慢指针找中点
考虑空间优化的可能性
注意保护原始数据结构
相关的思维训练:
回文数判断
回文子串问题
链表中点问题
链表反转的各种变体
小结
回文链表问题是一个很好的例子,展示了如何将基础算法(如链表反转、快慢指针)组合起来解决更复杂的问题。它教会我们:
基础算法的重要性
空间优化的思维方式
问题分解的方法
代码的优雅性
下次遇到类似的对称性判断问题,不要急着用额外空间,想想是否可以通过改变数据结构本身来解决问题!
作者:忍者算法
公众号:忍者算法
我准备了一份刷题清单,以及这些题目的详细题解,覆盖了绝大部分常见面试题。我可以很负责任地说,只要你把这些题真正掌握了,80%的算法面试都能遇到相似题目。公众号回复【刷题清单】获取~
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回文
链表
忍者
算法
生活
相关帖子
AI时代,人人都是算法思想工程师
列生成算法
为什么要学习数据结构和算法?有什么生活上的意义吗?
算法竞赛小trick:将区间问题转化为前缀和相减
链表(精选答案)
自感痕迹:生活即本源
从直觉到算法:贝叶斯思维的技术底层与工程实现
zq—算法基础:时空复杂度(1)
浅谈两大算法模型评估指标
LLM 算法岗 | 八股问答(3)· 强化学习与 RLHF
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
科技
AI时代,人人都是算法思想工程师
0
27
邰怀卉
2026-03-12
业界
列生成算法
0
89
扈怀易
2026-03-13
业界
为什么要学习数据结构和算法?有什么生活上的意义吗?
0
896
曲愍糙
2026-03-14
业界
算法竞赛小trick:将区间问题转化为前缀和相减
0
28
归悦可
2026-03-14
安全
链表(精选答案)
0
15
孟清妍
2026-03-14
安全
自感痕迹:生活即本源
0
640
施婉秀
2026-03-17
业界
从直觉到算法:贝叶斯思维的技术底层与工程实现
0
307
劝匠注
2026-03-18
业界
zq—算法基础:时空复杂度(1)
0
384
章绮云
2026-03-18
安全
浅谈两大算法模型评估指标
0
896
嗅叽
2026-03-19
业界
LLM 算法岗 | 八股问答(3)· 强化学习与 RLHF
0
823
乙荒
2026-03-21
回复
(28)
求几少
2025-10-9 23:20:08
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
谢谢分享,辛苦了
匣卒
2025-10-23 06:38:54
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢发布原创作品,程序园因你更精彩
瞿佳悦
2025-10-30 07:07:45
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢,下载保存了
喜及眩
2025-11-2 02:40:26
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
用心讨论,共获提升!
胁冉右
2025-11-7 18:45:26
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
谢谢分享,试用一下
秦晓曼
2025-12-5 21:48:59
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
这个好,看起来很实用
薯羞
2025-12-9 02:38:21
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
不错,里面软件多更新就更好了
缣移双
2026-1-20 17:52:49
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
喜欢鼓捣这些软件,现在用得少,谢谢分享!
厂潺
2026-1-21 16:53:03
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
用心讨论,共获提升!
郏琼芳
2026-1-25 08:30:22
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
过来提前占个楼
那虻
2026-1-27 07:01:55
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
不错,里面软件多更新就更好了
施婉秀
2026-1-28 03:08:12
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
过来提前占个楼
崔和美
2026-2-3 09:12:26
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
感谢分享,下载保存了,貌似很强大
铵滔
2026-2-9 09:04:03
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
过来提前占个楼
东新
2026-2-9 15:06:45
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
yyds。多谢分享
汪之亦
2026-2-9 18:38:39
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
分享、互助 让互联网精神温暖你我
窖咎
2026-2-9 21:14:12
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
谢谢分享,辛苦了
秦欣艷
2026-2-10 20:12:05
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢发布原创作品,程序园因你更精彩
宿遘稠
2026-2-11 06:37:18
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
鼓励转贴优秀软件安全工具和文档!
下一页 »
1
2
/ 2 页
下一页
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
程序
业界
签约作者
程序园优秀签约作者
发帖
辈霖利
2026-2-11 06:37:18
关注
0
粉丝关注
24
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991125
anyue1937
9994892
kk14977
6845359
4
xiangqian
638210
5
神泱
9522
6
韶又彤
9912
7
宋子
9878
8
荪俗
9016
9
闰咄阅
9995
10
刎唇
9995
查看更多
今日好文热榜
210
从车载HMI到数字座舱平台:基于Qt与Qtitan
645
彻底告别OpenClaw使用焦虑:我给他装上了“
627
PingCraft:从需求文档到可追踪工作项的 Ag
769
【译】 数据摄取构建模块简介(预览版)(二
918
【故障公告】数据库服务器磁盘 MBPS 高造成
744
"Memory in the Age of AI Agents: A Surve
216
Prompt 焚诀——一个模板,终结你和 AI 的
512
【节点】[SampleTexture3D节点]原理解析与
167
记一次Webshell流量分析 | 添柴不加火
979
旧安卓手机部署openclaw
635
AI编程时代,35岁以上程序员将何去何从?
830
[Refactor]CPP Learn Data Day 1
2
Block Copy 的内存布局详解
616
把 Flask 搬进 ESP32,高中生自研嵌入式 We
7
渐得如意智能自动化办公平台——定义属于你
891
[AI/Agent/社交] AI Agent社交网络产品:Mo
527
C++协程入门
288
TCSSOFTDEPTCOPY.zip Can download source
803
Vue3 + Iframe 实战:打造企业级流程配置中
824
“你用AI,那我也会用AI,我还要你干什么?