可视化图解算法:判断一个链表是否为回文结构(回文链表)

news/2025/3/24 18:13:25/文章来源:https://www.cnblogs.com/jiangzhou/p/18787590

1. 题目

描述

给定一个链表,请判断该链表是否为回文结构。

回文是指该字符串正序逆序完全一致。

数据范围: 链表节点数 0≤n≤105,链表中每个节点的值满足 ∣val∣≤107

示例1

输入:

{1}

返回值:

true

示例2

输入:

{2,1}

返回值:

false

说明:

2->1     

示例3

输入:

{1,2,2,1}

返回值:

true

说明:

1->2->2->1     

2. 解题思路

判断一个链表是否为回文结构,可以先将链表从中间分为两部分,对后半部分进行反转。之后依次对比前半部分链表与后半部分反转之后的节点值。难点在于如何找到中间节点(链表节点数量可能为偶数,也可能为奇数)。链表的反转参考前期的文章《可视化图解算法:反转链表》。

假如有两个链表,结构如下图所示:

步骤一:通过快慢指针分割链表(链表分割为:左右两部分)。

快慢指针变量的定义如下:

注意:fast初始化时指向的节点为slow的下一个节点。

当节点数量为偶数时,fast.next==Null,停止查找。slow.next为后半部分链表的起始点。

当节点数量为奇数时,fast==Null,停止查找。slow节点为中间节点,slow.next为后半部分链表的起始点(前半部分多一个节点)。

步骤二:反转后半部分链表。

步骤三:前后两部分链表节点值对比(判断节点值是否相等)。

如果文字描述的不太清楚,你可以参考视频的详细讲解。

  • Python版本:https://www.bilibili.com/cheese/play/ep1370399
  • Java版本:https://www.bilibili.com/cheese/play/ep1366843
  • Golang版本:https://www.bilibili.com/cheese/play/ep1364600

3. 编码实现

核心伪代码如下:

函数 判断回文链表(head: 链表节点) -> 布尔值:// 步骤1: 使用快慢指针分割链表fast = head.nextslow = head当 fast 不为空 且 fast.next 不为空:fast = fast.next.next  // 快指针每次移动两步slow = slow.next       // 慢指针每次移动一步new_node = slow.next       // 后半部分链表的起点slow.next = 空             // 断开链表,分割为左右两部分left = head                // 左半部分头节点// 步骤2: 反转右半部分链表right = 反转链表(new_node)  // 调用反转链表函数// 步骤3: 比较左右两部分的节点值当 right 不为空:如果 right.val != left.val:返回 Falseright = right.next    // 右半部分指针后移left = left.next      // 左半部分指针后移返回 True                  // 所有节点值匹配,是回文

具体完整代码你可以参考下面视频的详细讲解。

  • Python版本:https://www.bilibili.com/cheese/play/ep1370399
  • Java版本:https://www.bilibili.com/cheese/play/ep1366843
  • Golang版本:https://www.bilibili.com/cheese/play/ep1364600

4.小结

判断一个链表是否为回文结构,可以先将链表从中间分为两部分,对后半部分进行反转。之后依次对比前半部分链表与后半部分反转之后的节点值。难点在于找到中间节点(可以通过快慢指针查找到中间节点)。

更多数据结构与算法视频讲解,你可以从以下地址找到:

  • Python编码实现:https://www.bilibili.com/cheese/play/ep1509965
  • Java编码实现:https://www.bilibili.com/cheese/play/ep1510007
  • Golang编码实现:https://www.bilibili.com/cheese/play/ep1509945

对于链表的相关操作,我们总结了一套【可视化+图解】方法,依据此方法来解决链表相关问题,链表操作变得易于理解,写出来的代码可读性高也不容易出错。具体也可以参考视频详细讲解。

今日佳句:路虽远行则将至,事虽难做则必成。

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

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

相关文章

使用ESP32和Gemini REST API语音输入调用带有自定义参数的函数

我们在建造什么? 在之前的教程中,我介绍了如何通过REST将ESP32连接到谷歌Gemini API以发送音频文件并对其进行转录。在本教程中,我将扩展到实际使用录制的音频而不是转录它-在这种情况下,打开和关闭LED环,加上根据语音命令改变LED的颜色。虽然我只是在操纵一个LED环,但你…

20244211 实验一《Python程序设计》实验报告

20244211 2024-2025-2 《Python程序设计》实验一报告 课程:《Python程序设计》 班级: 2442 姓名: 朱睿颖 学号:20244211 实验教师:王志强老师 实验日期:2025年3月18日 必修/选修: 专业选修课 1.实验内容熟悉Python开发环境; 练习Python运行、调试技能; 编写程序,练习…

JTS 介绍

JTS 是一个用于创建和操作向量几何的Java库;本文主要介绍其基本概念及使用,文中所使用到的软件版本:Java 1.8.0_341、JTS 1.20.0。 1、简介 LocationTech JTS 拓扑套件™(JTS)是一个开源的 Java 软件库,提供了平面几何的对象模型以及一套基础的几何函数。JTS 遵循开放 GI…

【笔记】力扣 134. 加油站——贪心

134. 加油站 中等 在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。 给定两个整数数组 gas 和 cost ,如果你可以按顺…

2025.3.23 鲜花

[省选联考 2025] 追忆 题解[省选联考 2025] 追忆 题解hello (bpm) 2025恭喜获得 最速被击破奖🏆不会 bitset,赛时想不到分块也是没救了。 首先必然要坚定 bitset 信念,因为其严格难于导出子图。 维护后继直接 bitset 就是 \(\frac{nm}w\) 的。 考虑到第二个限制 \(l, r\) 如…

给wordpress文章提供在线翻译和朗读的功能

之前有一个用wordpress搭的英文站点,我想给文章每个段落下面加两个“朗读”和“翻译”的按钮,方便英语不好的浏览者快速的了解中文意思和读法。 下面给出实现思路,全部是deepseek给出的代码实现的。 1、在(functions.php)文件末尾加上如下代码function enqueue_custom_scrip…

第五章 影响估算的因素

对软件项目产生影响的因素,可以有多种分类方式。了解这些影响因素有助于提高估算的准确度,并改善对软件项目动态特性的整体理解。 影响到项目工作量、成本和进度的最具决定性的因素毫无疑问是项目的规模。其次是正在开发的软件的类型,紧随其后的是人员因素。开发中使用的编程…

2025.3.25(周二)

4、航空服务查询问题:根据航线,仓位,飞行时间查询航空服务。 假设一个中国的航空公司规定:① 中国去欧美的航线所有座位都有食物供应,每个座位都可以播放电影。② 中国去非欧美的国外航线都有食物供应,只有商务仓可以播放电影。③ 中国国内的航班的商务仓有食物供应,但是…

2025.3.19(周三)

2、找零钱最佳组合假设商店货品价格(R) 都不大于100元(且为整数),若顾客付款(P)在100元内,现有一个程序能在每位顾客付款后给出找零钱的最佳组合(找给顾客货币张数最少)。假定此商店的货币面值只包括:50元(N50)、10元(N10)、 5元(N5)、1元(N1) 四种。请结合等价类划分法…

如何使用microSD卡模块与Arduino

MicroSD卡模块 ESP32有不同的microSD卡模块兼容。我们使用microSD卡模块,它使用SPI通信协议进行通信。您可以使用带有SPI接口的任何其他microSD卡模块。这个microSD卡模块也与Arduino板等其他微控制器兼容。学习如何使用microSD卡模块与Arduino。您可以使用默认SPI引脚将其连接…

VMware ESXi 8.0U3d macOS Unlocker OEM BIOS 集成 Marvell AQC 网卡驱动定制版 (集成驱动版)

VMware ESXi 8.0U3d macOS Unlocker & OEM BIOS 集成 Marvell AQC 网卡驱动定制版 (集成驱动版)VMware ESXi 8.0U3d macOS Unlocker & OEM BIOS 集成 Marvell AQC 网卡驱动定制版 (集成驱动版) VMware ESXi 8.0U3d macOS Unlocker & OEM BIOS 集成网卡驱动和 NVMe …