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

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.xdnf.cn/news/16197.html

相关文章:

  • CAN总线仲裁中的延时补偿机制
  • Lua(文件I/O)
  • 【XGBoost】两个单任务的模型 MAP - Charting Student Math Misunderstandings
  • 游戏开发Unity/ ShaderLab学习路径
  • 光伏电站巡检清扫飞行机器人设计cad【6张】三维图+设计说明书
  • Java 中 Future 与 Callable 的使用详解
  • 3D Semantic Occupancy Prediction
  • Django 科普介绍:从入门到了解其核心魅力
  • 【Newman+Jenkins】实施接口自动化测试
  • 时间日期选择器组件进行日期和时间的禁用处理逻辑
  • IntelliJ IDEA中管理多版本Git子模块的完整指南
  • useContext
  • 前端学习日记(十二)
  • 三级知识点汇总(详解)【c++】——7
  • Java并发编程第八篇(CountDownLatch组件分析)
  • 基础入门 [CMD] Windows SSH 连接服务器教程(系统自带方式)
  • FreeRTOS—计数型信号量
  • Django基础(八)———数据库外键及表关系
  • Cisco 主模式配置
  • iOS Core Data 本地数据库 使用详解:从模型关系到数据操作
  • Python(09)正则表达式
  • HTTP性能优化实战:从协议到工具的全面加速指南
  • 大语言模型中提示词技术的原理、演进与未来发展研究
  • 基于Qt和OpenCV的图片与视频编辑器
  • 从0到1学习c++ 命名空间
  • Hive常用函数
  • GitHub Actions打包容器,推送 AWS ECR 并使 EKS 自动拉取以完成发版部署
  • [ComfyUI] --ComfyUI 是什么?比 Stable Diffusion WebUI 强在哪?
  • Linux Wlan 无线网络驱动开发-scan协议全流程详解
  • QT开发---字符编码与QString和QByteArray