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

LCR 027. 回文链表 不利用额外空间实现快慢指针

LCR 027. 回文链表

给定一个链表的 头节点 head ,请判断其是否为回文链表。

如果一个链表是回文,那么链表节点序列从前往后看和从后往前看是相同的。

示例 1:

输入: head = [1,2,3,3,2,1]
输出: true

示例 2:

输入: head = [1,2]
输出: false

提示:

  • 链表 L 的长度范围为 [1, 105]
  • 0 <= node.val <= 9

进阶:能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?

注意:本题与主站 234 题相同:. - 力扣(LeetCode)

快慢指针

35min

1.定义快指针使得快指针到终点后慢指针刚好到中点 快指针前进两步 慢指针前进一步

        此时需要注意可以把快慢指针定义到同一起点方便管理

2.将中点后的链表逆序 得到后半部分

3.逆序的头结点z->a 与 a->z比较。如果有一个不同则不为回文数

    public boolean isPalindrome(ListNode head) {//方法2 快慢指针ListNode fastPoint = head;ListNode slowPoint = head;//1.定义快指针使得快指针到终点后慢指针刚好到中点 快指针前进两步 慢指针前进一步while(fastPoint != null && fastPoint.next != null){fastPoint = fastPoint.next.next;slowPoint = slowPoint.next;}//*此时的慢指针为中点//2.将中点后的链表逆序ListNode prev = null;ListNode curr = slowPoint;ListNode nextTemp = null;while (curr != null) {nextTemp = curr.next;curr.next = prev;prev = curr;curr = nextTemp;}fastPoint = head;//prev为翻转的链表while(prev != null){if(prev.val != fastPoint.val){return false;}prev = prev.next;fastPoint = fastPoint.next;}return true;//3.逆序后的链表与开始的头节点相比较//4.将逆序的链表重新逆序得到head}


http://www.mrgr.cn/news/61420.html

相关文章:

  • OSError: no library called “cairo-2“ was found no library called “cairo“ was
  • 84674
  • msvcr100.dll丢失怎样修复,介绍6个简单靠谱的方法
  • 基于SSM+微信小程序的汽车维修管理系统(汽车5)
  • Qt编程技巧小知识点(6)根据 *IDN? 对程控仪器连接状态进行确认
  • leetcode hot100【LeetCode 543. 二叉树的直径】java实现
  • 离散数学实验五c语言(并查集处理,Kruskal算法求最小生成树)
  • binlog 介绍
  • C# OpenCvSharp DNN UNet 推理
  • 2024年【通信安全员ABC证】最新解析及通信安全员ABC证新版试题
  • qt的c++环境配置和c++基础【正点原子】嵌入式Qt5 C++开发视频
  • 【AIGC】2024-arXiv-Lumiere:视频生成的时空扩散模型
  • 开始菜单增强工具 StartAllBack v3.7.10.4910 直装激活版
  • dubbo介绍
  • 13.音乐管理系统(基于SpringBoot + Vue)
  • YoloV9改进策略:Block改进|RFE模块,提高小物体的识别精度|即插即用|代码+修改过程
  • 抽取picomax的设备树
  • Leetcode 第 142 场双周赛题解
  • leetcode57:插入区间
  • 明日周刊-第25期