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

2025年- H31-Lc139- 242.回文链表(快慢指针)---java版--需2刷

1.题目描述

在这里插入图片描述

2.思路

(1)将链表取中位数,分为左右两部分。
(2)右半部分的元素进行反转链表,能达到O(1)的空间复杂度
(3)再判断左右部分的元素,是否相等。如果相等,则是回文字符串

3.代码实现

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public boolean isPalindrome(ListNode head) {if (head == null || head.next == null) return true;//1.创建快慢指针,都从头节点出发ListNode slow=head;ListNode fast=head;//2.用快慢指针找中点, 访问指针前必须判断当前指针和下一个指针是否为 null,防止空指针异常。while(fast!=null&&fast.next!=null){slow=slow.next;// 走一步fast=fast.next.next; // 走两步//如果是偶数,慢指针会停留在前半部分的尾数上//如果是奇数,慢指针中位数上}// 第二步:反转后半部分链表(从 slow 开始)ListNode backHalf=reverseList(slow);// 第三步:从头和反转后的中点开始比较ListNode p1=head;ListNode p2=backHalf;while(p2!=null&&p1!=null){if(p2.val!=p1.val)//你只判断了 p2 != null,但 p1 可能提前变成了 null(尤其链表长度是奇数时){return false;}p1=p1.next;p2=p2.next;}return true;}// 辅助函数:反转链表private ListNode reverseList(ListNode head) {ListNode pre=null;ListNode curr=head;while(curr!=null)//while(curr != null),这样最后一个节点才能反转。{ListNode temp=curr.next;//暂存第二个节点//赋值,修改指针引用(现在==过去)。反转指针方向curr.next=pre;//整体移动指针,先移动指针,再移动值(继续下一个节点)pre=curr;curr=temp;}return pre;//指向的就是 反转后的新头节点
}
}
http://www.xdnf.cn/news/515827.html

相关文章:

  • 新型太空电梯——半摆卫星太空电梯 的设计与验证
  • 【Python数据处理系列】输入txt,读取特定字符转换成特定csv数据并输出
  • PointNet++:点云处理的升级版算法
  • WebSocket实时双向通信:从基础到实战
  • 3:OpenCV—视频播放
  • 彻底解决docker代理配置与无法拉取镜像问题
  • 第二章 苍穹外卖
  • Git基础原理和使用
  • 区间带边权并查集,XY4060泄露的测试点
  • elementplus menu 设置 activeindex
  • GO语言语法---For循环、break、continue
  • 计算机组成与体系结构:Snooping-Based Protocols(监听式协议)
  • STM32 OTA 中断向量表重定向
  • Unity3D仿星露谷物语开发45之收集农作物特效
  • 第四天的尝试
  • 【网络】Wireshark练习3 analyse DNS||ICMP and response message
  • 2021ICPC四川省赛个人补题ABDHKLM
  • DeepSeek本地部署全攻略:从零搭建到Web可视化及数据训练
  • AM32电调学习解读八:无感驱动相位波形解析
  • STK手动建链+matlab联调
  • 小麦病害分割数据集labelme格式1882张4类别
  • BGP策略实验练习
  • 学习日志10 java
  • ubuntu中已经存在python3.12.3, 如何安装python3.10.8且命令python3版本切换为python3.10.8
  • MySQL之储存引擎和视图
  • 访问共享打印机提示错误0x00000709多种解决方法(支持win10和win11)
  • minicom串口调试助手
  • 顺 序 表:数 据 存 储 的 “ 有 序 阵 地 ”
  • 禾本科植物胚乳的发育
  • 从c++到python