每日一题——链表的回文结构

链表的回文结构

1. 题目描述

对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。

给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。

测试样例:

输入:1->2->2->1

输出:true

2. 思路

  1. 判断链表是否为空,如果为空,那么链表就是回文的

  2. 找到中间元素

    1. 定义两个指针slowfastfast每次移动两步,slow每次移动一步,当fast走到链表中的最后一个节点是,slow就指向了链表的中间节点。

    image-20231221191717372

  3. 反转链表后半部分的元素

    1. 定义指针cur指向中间节点的next
    2. 从中间节点循环遍历链表
    3. 定义指针curNext指向curnext(保存下一个节点)
    4. 将当前节点的next指向slow
    5. slow移动到当前节点的cur位置
    6. cur移动到下一个节点

    image-20231221195507479

  4. 同时遍历反转后的链表和原始链表的前半部分,并比较每个节点的值。如果所有的节点都匹配,那么链表就是回文;否则它不是回文。

    1. 一个从前一个从后循环遍历链表,直到相遇
    2. 判断两个当前节点是否相同,如果不同返回false
    3. 如果相同判断headnext等不等于slow,如果等于直接返回true(链表节点个数为偶数个)
    4. head移动到下一个节点
    5. slow移动到下一个节点

    image-20231221221213766

    3.代码

    import java.util.*;/*
    public class ListNode {int val;ListNode next = null;ListNode(int val) {this.val = val;}
    }*/
    public class PalindromeList {public boolean chkPalindrome(ListNode head) {if (head == null) {return true;}// write code here// 1.找到中间元素ListNode fast = head;ListNode slow = head;while (fast != null && fast.next != null) {fast = fast.next.next;slow = slow.next;}// 2.反转链表ListNode cur = slow.next;while (cur != null) {ListNode curNext = cur.next;cur.next = slow;slow = cur;cur = curNext;}// 3.一个向后遍历一个向前遍历while (slow != head) {if (slow.val != head.val) {return false;}if (head.next == slow) {return true;}head = head.next;slow = slow.next;}return true;}
    }
    

    运行结果:

    image-20231221221355132

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/292050.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql空间查询之搜索在不规则图形范围内点的数据

前言 这次的需求是在地图上画一个不规则图形,查询这个范围内的数据,类似下图: 前端会把每个折现点的经纬度传过来,比如:0 0, 0 10, 10 10, 10 0, 0 0,注意要首尾相连,这样才是一个完整的图形。 数据准备:有一个包含点的数据表,并且该表具有一个名为point的列来存…

【游戏篇】Scratch之安全上升的气球

【作品展示】安全上升的气球 操作:点击小绿旗,按下键盘方向键控制气球躲避障碍物同时还要拿到金币。

MySQL增删改查(增加)

White graces:个人主页 🙉专栏推荐:Java入门知识🙉 🙉 内容推荐:MySQL数据库和表操作🙉 🐹今日诗词:父兵诛卓起长沙,直取江东作帝家🐹 ⛳️点赞 ☀️收藏⭐️关注💬卑微小博主&…

VM Group

在复杂方案中模块过多可能造成查看或修改方案时存在视觉混乱,不够直观。此时可利用Group模块进行模块整合,同时Group模式也兼容循环的功能,如下图所示。 双击Group模块可进入Group内部,如下图所示。 在Group模块单击 可设置输入、…

ai学习笔记-入门

目录 一、人工智能是什么?可以做什么? 人工智能(Artificial Intelligence): 人工智能的技术发展路线: 产业发展驱动因素:数据、算力、算法 二、人工智能这个工具的使用原理入门 神经网络⭕数学基础 1.神经网络的生物表示 …

『Linux升级路』基础开发工具——gdb篇

🔥博客主页:小王又困了 📚系列专栏:Linux 🌟人之为学,不日近则日退 ❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、背景知识介绍 二、gdb指令介绍 一、背景知识介绍 在软件开发中&#xff0c…

cilium原理之ebpf尾调用与trace

背景 在深入剖析cilium原理之前,有两个关于epbf的基础内容需要先详细介绍一下: 1. ebpf尾调用 尾调用类似于程序之间的相互跳转,但它的功能更加强大。 2. trace 虽然之前使用trace_printk输出日志,但这个函数不能多用&#x…

Fl Studio 20.9 中文汉化破解版永久版下载(含Keygen)

FL Studio 20.9.0.2736破解版是最优秀、最繁荣的数字音频工作站 (DAW) 之一,日新月异。 它是一款录音机和编辑器,可让您不惜一切代价制作精美的音乐作品并保存精彩的活动画廊。 为方便用户,FL Studio Keygen提供三种不同的版本——Fruity 版…

css图片属性,图片自适应

CSS 图片属性指南:background-size 和 object-fit 在前端开发中,使用图片是非常常见的。为了让图片在网页中显示得更好,CSS 提供了多种属性来调整和控制图片的大小和布局。其中,background-size 和 object-fit 是两个常用的属性&a…

邮政物流快递查询,并筛选出其中的提前签收件

批量查询邮政快递单号的物流信息,并将其中的提前签收件筛选出来。 所需工具: 一个【快递批量查询高手】软件 邮政快递单号若干 操作步骤: 步骤1:运行【快递批量查询高手】软件,第一次使用的朋友记得先注册&#xff…

深⼊理解指针

1. 内存和地址 1.1 内存 在讲内存和地址之前,我们想有个⽣活中的案例: 假设有⼀栋宿舍楼,把你放在楼⾥,楼上有100个房间,但是房间没有编号,你的⼀个朋友来找你玩, 如果想找到你,就…

爬虫课程考试方式说明

爬虫课程考试方式说明 一、开课情况 考查课 082116415 50人,0864211,1-15单周 理论学时16 实验学时0 上课地点:周一 3-4节 十号教学楼A303 51人,0864212,1-15单周 理论学时16 实验学时0 上课地点:周四 3-4…