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

leetcode 234.回文链表

思路:其实就是判断反转链表是不是和原链表一样的问题。

我们可以借助反转链表的思路,首先我们先把链表的全部元素正向存储,然后再把链表进行反转。

之后我们再遍历反转之后的链表结点元素是不是和刚刚存储数组里面的元素一致就可以了。一旦有一个不一致的就说明不是。否则就是可以。

这个做法的缺点就是消耗的空间复杂度较大。

/*** 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) {int []arr=new int[100010];ListNode tmp=head;int len=0;while(tmp!=null){arr[len++]=tmp.val;tmp=tmp.next;}ListNode a1=null;ListNode a2=head;while(a2.next!=null){ListNode tmp1=a2.next;ListNode tmp2=a2;a2.next=a1;a2=tmp1;a1=tmp2;}a2.next=a1;int i=0;while(a2!=null){if(a2.val!=arr[i]){return false;}i++;a2=a2.next;}return true;}
}

思路二:

快慢指针,这里的快慢指针用来查找链表的中点。快指针每次走2步,慢指针每次走1步。

我们找出来中点之后,把后半段的链表进行反转,然后再把其前半段比较就行了。

有人问,如果链表长度是奇数怎么办?没关系,我们还是一样这样做,只不过,我们在判断前半段和后半段是否相等的时候,忽略中点不计,也就是以后半段的长度为主。因为这样快慢指针出来之后,前半段会多出一个,所以我们以后半段的长度为主。

/*** 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;ListNode nima=new ListNode(-1);nima.next=head;ListNode slow=nima;ListNode fast=nima;while(fast!=null&&fast.next!=null){//奇数长度和偶数长度区别判断slow=slow.next;fast=fast.next.next;}fast=slow.next;slow.next=null;slow=nima.next;ListNode tmp1=fast;ListNode tmp2=null;while(tmp1.next!=null){ListNode a1=tmp1.next;ListNode a2=tmp1;tmp1.next=tmp2;tmp1=a1;tmp2=a2;}tmp1.next=tmp2;while(tmp1!=null){if(tmp1.val!=slow.val)return false;tmp1=tmp1.next;slow=slow.next;}return true;}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【C++ 面试 - 基础题】每日 3 题(一)
  • postgreSQL16添加审计功能
  • centos上传工具
  • LeetCode Hard|【460. LFU 缓存】
  • 【Cesium开发实战】视点信息功能的实现,双击保存当前视点为缩略图
  • CLEFT 基于高效大语言模型和快速微调的语言-图像对比学习
  • 利用 Angular 发挥环境的力量
  • 区块链ddos防护怎么做
  • node中使用http创建web服务器
  • C++初学(10)
  • 常见框架漏洞
  • exptern “C“的作用,在 C 和 CPP 中分别调用 openblas 中的 gemm 为例
  • (el-Date-Picker)操作(不使用 ts):Element-plus 中 DatePicker 组件的使用及输出想要日期格式需求的解决过程
  • oracle库PASSWORD_VERSIONS 对应的加密方式
  • 三大浏览器Google Chrome、Edge、Firefox内存占用对比
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • 时间复杂度分析经典问题——最大子序列和
  • [笔记] php常见简单功能及函数
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • Java超时控制的实现
  • MQ框架的比较
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • spring-boot List转Page
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • vue的全局变量和全局拦截请求器
  • Vue学习第二天
  • 番外篇1:在Windows环境下安装JDK
  • 分享几个不错的工具
  • 汉诺塔算法
  • 时间复杂度与空间复杂度分析
  • 使用API自动生成工具优化前端工作流
  • 选择阿里云数据库HBase版十大理由
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #Java第九次作业--输入输出流和文件操作
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (C#)获取字符编码的类
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (pycharm)安装python库函数Matplotlib步骤
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (二) 初入MySQL 【数据库管理】
  • (二十四)Flask之flask-session组件
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (一)、python程序--模拟电脑鼠走迷宫
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转)创业的注意事项
  • (转)可以带来幸福的一本书
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .cn根服务器被攻击之后
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .net SqlSugarHelper