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

LeetCode 234. 回文链表

本文给出时间复杂度为O(n)O(n)O(n),空间复杂度为O(1)O(1)O(1)的解法思路。
对于这样的情况

我们可以使用快慢指针确定链表的中间节点,初始时让slowslowslowfastfastfast均等于headheadhead

slowslowslow每次移动1个节点,fastfastfast每次移动2个节点


如果链表节点数量为偶数,最终结果如下


判断指针移动结束的条件是
fast.next==null∣∣fast.next.next==nullfast.next == null \quad || \quad fast.next.next == nullfast.next==null∣∣fast.next.next==null
不论链表节点数是奇是偶,最后slowslowslow指针都会指向颠倒链表的头节点。为了满足空间复杂度为O(1)O(1)O(1)的任务,我们原地调整颠倒链表。


下面我们讨论原地翻转链表的算法

我们最终的目标是这样的

首先让cur.next=precur.next = precur.next=pre

再按顺序,让pre=cur,cur=nxt,nxt=cur.nextpre = cur, cur = nxt, nxt = cur.nextpre=cur,cur=nxt,nxt=cur.next

重复上面的操作,直到进行到下面这一步

在按pre=cur,cur=nxt,nxt=cur.nextpre = cur, cur = nxt, nxt = cur.nextpre=cur,cur=nxt,nxt=cur.next顺序进行赋值的过程中,发现问题,所以,判断是否按顺序赋值的条件就是
nxt≠nullnxt \neq nullnxt=null
跳出循环后,处理边界即可
slow.next.next=nxt,slow.next=curslow.next.next = nxt, slow.next = curslow.next.next=nxt,slow.next=cur


最后按顺序比较两个链表每个节点值是否相同即可。

classSolution{// 原地翻转链表的方法privatevoidreverseLinkedList(ListNodepreHead){// pre才是待翻转链表真正的头节点ListNodepre=preHead.next;if(pre.next==null){// 待翻转的链表只有1个节点,直接返回return;}// 当前操作的节点ListNodecur=pre.next;ListNodenxt=cur.next;// 先做一次操作cur.next=pre;while(nxt!=null){pre=cur;cur=nxt;nxt=cur.next;cur.next=pre;}// 处理边界preHead.next.next=nxt;preHead.next=cur;}publicbooleanisPalindrome(ListNodehead){if(head.next==null){// 链表只有1个节点returntrue;}elseif(head.next.next==null){// 链表只有2个节点return(head.val==head.next.val);}// 初始化快慢指针ListNodeslow=head,fast=head;// 找到中间节点while(fast.next!=null&&fast.next.next!=null){slow=slow.next;fast=fast.next.next;}// 翻转链表reverseLinkedList(slow);// 让slow等于翻转后链表的头节点slow=slow.next;// 开始比较while(slow!=null){if(head.val!=slow.val){returnfalse;}head=head.next;slow=slow.next;}returntrue;}}
http://www.jsqmd.com/news/523774/

相关文章:

  • 永磁同步电机FOC最小损耗算法
  • ESP32开发板国内镜像加速安装指南(附2023最新可用JSON地址)
  • 48个适合人力资源工作和运营的AI提示词
  • 基于MATLAB Simulink的PEM电解槽制氢仿真模型研究
  • 【认知雷达(Cognitive Radar)与深度学习融合架构】第5章 LSTM时序预测与多目标轨迹关联
  • 探索异构混合阶多智能体系统的一致性:UGV 与 UAV 的协同之旅
  • 51单片机初相识
  • 基于多因子定价模型解析:美元强势与利率预期重构驱动的金价8连跌机制
  • Cube MX实战:如何用STM32F系列和ADS1255构建高精度电流源(附完整代码)
  • 分布式驱动电动汽车:最优横摆力矩控制与规则扭矩分配控制的对比研究——基于LQR计算与最小附着利...
  • 聚焦镀锌管/角钢/方管/螺旋管,精选本土标杆企业,助力工程采购决策 - 深度智识库
  • Timer-S1 正式发布:首个十亿级时序基础模型,预测性能达到 SOTA
  • 从这8道Swift题逆袭大厂:2025最新类型系统考点精讲(含泛型实战)
  • 从干系人管理到项目交付:绩效域全流程避坑指南
  • SCN-Adaboost随机配置网络模型的多特征输入二分类及多分类模型实现
  • OpenClaw本地快速部署指南及主流AI模型API接入方法
  • 都在用 Java8 或 Java17,那 Java9 到 16 呢?他们真的没用吗?
  • VideoAgentTrek-ScreenFilter免配置环境:中文Web界面一键启动全流程
  • DeepSeek总结:JDK8-JDK22重要新特性
  • 【56页PPT】工业互联网工业超脑智能制造智慧工厂解决方案:总体架构设计、九大核心价值、九大数字化详细功能介绍、五大要素......
  • 杰理之有USB mic 的同时还需要有16K的IIS 输出 声音异常问题【篇】
  • GriddyCode:用Lua脚本打造个性化代码编辑器的终极指南
  • 手把手教你用fscan+MSF搞定CTFshow内网靶场(附PHAR攻击技巧)
  • 基于多因子流动性模型的“黄金闪崩”解析:利率预期强化与资金再平衡驱动的金价8%下跌机制
  • 【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
  • 从入门到实战:Python 在网络安全领域的全栈应用指南
  • ROS建立工作空间-功能包-ROS节点-发布者-订阅者
  • 【VIVADO调试手记】从[Opt 31-430]错误看FDCE未驱动信号的定位与修复
  • ClawdBot国产化适配:支持麒麟V10+昇腾910B,vLLM华为插件实测可用
  • 介绍6个专业AI论文工具,提供智能降重及文本重构服务,有效控制重复率