当前位置: 首页 > news >正文

LeetCodeOJ题:回文链表

题目链接

回文链表

题目描述

 

解题思路:

 1.找到链表中间节点:

使用快慢指针法。定义两个指针,慢指针每次移动一个节点,快指针每次移动两个节点。当快指针到达链表末尾时,慢指针就会指向链表的中间节点。如果链表有奇数个节点,慢指针指向正中间的节点;如果链表有偶数个节点,慢指针指向正中间右边的节点。例如对于链表1->2->3->4->5,慢指针最终会指向3;对于链表1->2->3->4,慢指针会指向3。

2.反转后半部分链表:

从中间节点开始,将其后的链表进行反转。可以使用迭代或递归的方式实现链表反转。反转后,原链表后半部分的顺序被颠倒,这样就可以方便地与前半部分进行比较。例如,对于链表1->2->3->4->5,找到中点3后,将3之后的4->5反转成5->4,得到两条链表1->2->3和5->4。 

 

3.比较前后两部分链表:

设置两个指针,一个从原链表的头节点开始,另一个从反转后的后半部分链表的头节点开始,同时遍历这两条链表,每次循环比较两个指针所指向节点的值是否相等。如果不相等,则说明链表不是回文链表,返回false。如果循环直到反转后的后半部分链表遍历结束,都没有出现不相等的情况,说明链表是回文链表,返回true。 

整体过程如下

  

疑难疑点 

  • 关于不反转整个链表的原因:如果反转整个链表,确实可以从新的头节点开始依次访问原链表的最后一个节点、倒数第二个节点等,但这样会破坏链表前半段的结构。而我们需要同时遍历原链表的前半部分和后半部分来进行比较,若反转整个链表,就无法正常获取原链表前半部分的节点顺序,导致无法实现通过比较前后部分来判断回文的逻辑7。

 完整代码:

 

http://www.lryc.cn/news/597913.html

相关文章:

  • Java学习----原型模式
  • vant-field 显示radio
  • 【Java】空指针(NullPointerException)异常深度攻坚:从底层原理到架构级防御,老司机的实战经验
  • 高级 JAVA 工程师卷 1
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-20,(知识点:热阻的概念,散热)
  • 专题:2025微短剧行业生态构建与跨界融合研究报告|附100+份报告PDF汇总下载
  • Python 使用环境下编译 FFmpeg 及 PyAV 源码(英特尔篇)
  • 第4章唯一ID生成器——4.1 分布式唯一ID
  • 中小企业安全落地:低成本漏洞管理与攻击防御方案
  • 深度分析Java内存模型
  • 企业级数据分析创新实战:基于表格交互与智能分析的双引擎架构
  • 【REACT18.x】CRA+TS+ANTD5.X实现useImperativeHandle让父组件修改子组件的数据
  • 赋能决策与创新的数据引擎:数据分析平台的价值与未来
  • 增强LLM最后隐藏层的意义与效果
  • 使用 MobaXterm 登录你的阿里云 ECS 实例
  • 常用的Typescript特性
  • python---元组(Tuple)
  • M3066ANL网络变压器,常用于NEC方案机顶盒等网络设备M3066AN实现网络信号的稳定传输与电气隔离保护
  • day 33打卡
  • 傅里叶转换(机器视觉方向)
  • 从 Shell 脚本到 Go 应用:使用 Kiro AI 助手完成 Harpoon 项目重构的完整实践
  • Android NDK与JNI深度解析
  • Day01_C++编程
  • 终端VS命令解释器(Linux Windows)
  • 算法牢笼与思想飞地:在人工智能时代守卫灵魂的疆域
  • 【使用TPCC和TPCH进行性能测试】
  • 编程日常开发工具整理
  • 顺丰面试提到的一个算法题
  • C# 继承 虚方法
  • linux性能调整和故障排查