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

234. 回文链表(java)

个人理解:

1.先找到链表的中间节点,将链表分为前后两部分

        方法:设置快慢指针,初始都指向头节点,慢指针每次走一步,快指针每次走两步。循环结束条件为:快指针后两个元素不为空,此时慢指针指的就是前半部分链表的最后一个节点。将该节点返回。

2.对后半部分链表进行翻转

        传入上一步返回结果的next,如leftEnd.next。 对后半部分链表进行翻转。翻转后返回后半部分链表的头节点,也就是pre指针。

3.对两部分链表分别从头开始比较

class Solution{public boolean isPalindrome(ListNode head){// 1.找到中间节点,翻转后面部分的链表if(head==null){return false;	}ListNode leftEnd=middleList(head);   //找到左边部分链表的结束位置ListNode rightStart=reverseList(leftEnd.next);   // 翻转后边部分的链表,返回头节点//开始比较两部分链表,判断回文ListNode a=head;ListNode b=rightStart;while(b!=null){if(a.val!=b.val){return false;}a=a.next;b=b.next;}return true;} public ListNode middleList(ListNode head){// 利用快慢指针找中间节点ListNode slow=head;ListNode fast=head;// 移动快慢指针while(fast.next!=null&&fast.next.next!=null){slow=slow.next;fast=fast.next.next;}return slow;}//翻转链表public ListNode reverseList(ListNode head){ListNode cur=head;   //初始cur指针指向头节点,pre指针指向空ListNode pre=null;while(cur!=null){   // 翻转和移动pre,cur 先移动pre,否则cur会被覆盖ListNode tmp=cur.next;cur.next=pre;pre=cur;cur=tmp;}return pre;}
}

http://www.xdnf.cn/news/2475.html

相关文章:

  • 李沐动手深度学习(pycharm中运行笔记)——07.自动求导
  • Kaamel白皮书:IoT设备安全隐私评估实践
  • Golang | 向倒排索引上添加删除文档
  • 每天五分钟深度学习框架pytorch:使用visdom绘制损失函数图像
  • 布隆过滤器(Bloom Filter)简介
  • Vue Router 核心指南:构建高效单页应用的导航艺术
  • 用Python做有趣的AI项目4:AI 表情识别助手
  • Linux:基础IO 文件系统
  • 吴恩达深度学习作业之风格转移Neural Style Transfer (pytorch)
  • 【创新实训项目博客】数据库搭建
  • pikachu靶场-敏感信息泄露
  • 深圳市富力达:SAP一体化管理助力精密制造升级 | 工博科技SAP客户案例
  • 在Azure Databricks中实现缓慢变化维度(SCD)的三种类型
  • 服务器不能复制粘贴文件的处理方式
  • 信竞中的数学(一):质数
  • 关于 React Fiber 架构、Hooks 原理
  • 机器学习的一百个概念(13)布里尔分数
  • OkHttp源码梳理
  • 数字后端设计 (六):验证——给芯片做「超严格体检」
  • 苍穹外卖(缓存商品、购物车)
  • 基于Qt5的蓝牙打印开发实战:从扫描到小票打印的全流程
  • 关系型数据库PostgreSQL vs MySQL 深度对比:专业术语+白话解析+实战案例
  • Tomcat的安装与配置
  • 高能效计算:破解算力增长与能源约束的科技密码
  • JavaScript 函数与算法性能优化
  • 微软GraphRAG的安装和在RAG中的使用体会
  • Javase 基础入门 —— 06 final + 单例
  • 游戏哪些接口会暴露源IP?_深度解析服务器通信安全隐患
  • Apache Sqoop数据采集问题
  • 极客时光:第二部分——用QLoRA、RunPod和Cursor以超低成本微调DeepSeek-7B打造你的聊天机器人