当前位置: 首页 > 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;}
}

http://www.lryc.cn/news/419579.html

相关文章:

  • AD中Split Planes 的作用和功能
  • [linux][命令]linux文件操作命令大全
  • 大语言模型 (LLM) 窥探未来
  • WPF DataGrid调试错误总结
  • 【GCC】结合GPT4 延迟梯度学习1:公式推导及理论分析
  • 【Linux】【网络】进程间关系与守护进程
  • 红黑树的插入与删除
  • 联通数科如何基于Apache DolphinScheduler构建DataOps一体化能力平台
  • Python知识点:如何使用Mitmproxy进行HTTP/HTTPS流量分析
  • 06:【stm32】OLED模块的简单使用
  • HIVE4.0.0的10000端口启动不起来的一种情况
  • [极客大挑战 2019]FinalSQL1
  • Go语言 标签Label
  • 自反射 RAG 管道:如何实现?
  • 怎么将jar注册为windows系统服务详细操作
  • 数据结构.
  • thinkphp5之sql注入漏洞-builder处漏洞
  • 30集 如何编写ESP32程序接入AIGC实现更多有趣的功能-《MCU嵌入式AI开发笔记》
  • 【JUC】Java对象内存布局和对象头
  • 简单介绍一下css中transform的内容
  • C 循环
  • 什么是设计模式?一文理解,通俗易懂!
  • doxygen制作接口文档
  • PDF怎么在线转Word?介绍四种转换方案
  • 大数据应用型产品设计方法及行业案例介绍(可编辑110页PPT)
  • 【Python零基础学习】Python环境安装和IDE选择
  • 【langchain学习】使用LangChain创建具有上下文感知的问答系统
  • 原神4.8版本升级计划数据表
  • 海南云亿商务咨询有限公司放大电商品牌影响力
  • 用exceljs和file-saver插件实现纯前端表格导出Excel(支持样式配置,多级表头)