当前位置: 首页 > 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.dtcms.com/a/198362.html

相关文章:

  • c++编写中遇见的错误
  • 如何利用DeepSeek提升工作效率
  • LaTeX OCR - 数学公式识别系统
  • matlab分段函数
  • 大模型解析:AI技术的现状、原理与应用前景
  • Ubuntu搭建NFS服务器的方法
  • 【Linux】第十八章 调优系统性能
  • 面试中的线程题
  • 系统架构设计(十二):统一过程模型(RUP)
  • 【设计模式】- 行为型模式2
  • 深度解析:AWS NLB 与 ALB 在 EKS 集群中的最佳选择
  • HarmonyOS:应用文件访问(ArkTS)
  • ACL完全解析:从权限管理到网络安全的核心防线
  • SMT贴片加工工艺优化与效率提升
  • 基于FPGA的电子万年历系统开发,包含各模块testbench
  • 开启健康生活的多元养生之道
  • 现代生活健康养生新视角
  • 科学养生指南:解锁健康生活密码
  • Selenium-Java版(frame切换/窗口切换)
  • 医学影像开发的开源生态与技术实践:从DCMTK到DICOMweb的全面探索
  • Spring3+Vue3项目中的知识点——JWT
  • 14【高级指南】Django部署最佳实践:从开发到生产的全流程解析
  • 【Mini 型 http 服务器】—— int get_line(int sock, char *buf, int size);
  • 使用AI 生成PPT 最佳实践方案对比
  • es聚合-词条统计
  • Java学习手册:服务熔断与降级
  • Ubuntu 18.04设置静态IP的方法(图形化操作)
  • Spring-Beans的生命周期的介绍
  • nginx模块使用、过滤器模块以及handler模块
  • Linux 文件(1)