【数据结构】反转链表、链表的中间节点、链表的回文结构(单链表OJ题)
正如标题所说,本文会图文详细解析三道单链表OJ题,分别为:
- 反转链表 (简单)
- 链表的中间节点 (简单)
- 链表的回文结构 (较难)
把他们放在一起讲的原因是: 反转链表 和 链表的中间节点 是 链表的回文结构 的基础
为什么这样说?请往下看:
目录
1. 反转链表
做题思路
画图理解
代码实现
2. 链表的中间节点
做题思路
画图理解
代码实现
3. 链表的回文结构
做题思路
画图理解
代码实现
1. 反转链表

LeetCode链接:206. 反转链表 - 力扣(LeetCode)
💭做题思路
- 遍历链表,改变每个节点的链接方向,使其链向前节点
- 如果是第一个节点,使其链向 NULL

这里需要3个指针:
- cur 指向当前需要修改的节点
- prev 记录 cur 的前一个节点, cur 要链向此节点
- next 记录 cur 的后一个节点,避免 cur 改变链接方向后找不到下个节点
🎨画图理解

✍️代码实现
struct ListNode* reverseList(struct ListNode* head)
{struct ListNode* cur = head;struct ListNode* prev = NULL;while (cur != NULL){struct ListNode* next = cur->next;cur->next = prev;prev = cur;cur = next;}return prev;
}
最后提交代码试试:

完美通过,本题并不难,来搞下一题
2. 链表的中间节点

LeetCode链接:876. 链表的中间结点 - 力扣(LeetCode)
💭做题思路
- 快慢指针
- 搞两个指针,一个叫 fast ,一个叫 slow
- 快指针 fast 一次走两步
- 慢指针 slow 一次走一步
- 当 fast 走到 NULL 时, slow 恰好在中间,此时 slow 指向的节点就是中间节点
🎨画图理解

✍️代码实现
struct ListNode* middleNode(struct ListNode* head)
{struct ListNode* slow = head;struct ListNode* fast = head;while (fast != NULL && fast->next != NULL){slow = slow->next;fast = fast->next->next;}return slow;
}
提交代码:

这道题也很简单,主要就是快慢指针的思路,第一次接触的话可能想不到这种方法
接下来就是本文重点了,前面这些只是开胃小菜
3. 链表的回文结构

牛客链接:链表的回文结构_牛客题霸_牛客网 (nowcoder.com)
💭做题思路
1. 找到中间节点
2. 反转中间节点及其之后的链表
3. 此时把链表分为两段:
- 未反转的链表为一段,用指针 list1 指向这段链表的头节点
- 反转过的链表为另一段,用指针 list2 指向这段链表的头节点
4. 比较 list1 和 list2 节点的值是否相等
- 如果相等, list1 和 list2 同时往后走,去比较下一组数据
- 如果不相等,说明链表不是回文结构,返回 false
5. 当 list2 走到 NULL 处时,说明此链表是回文结构,返回 true
🎨画图理解

可以看到本题需要调用之前写过的代码
这就是为什么我说前两道题是本题的基础
✍️代码实现
//找链表的中间节点
struct ListNode* middleNode(struct ListNode* head)
{struct ListNode* slow = head;struct ListNode* fast = head;while (fast != NULL && fast->next != NULL){slow = slow->next;fast = fast->next->next;}return slow;
}//反转链表
struct ListNode* reverseList(struct ListNode* head)
{struct ListNode* cur = head;struct ListNode* prev = NULL;while (cur != NULL){struct ListNode* next = cur->next;cur->next = prev;prev = cur;cur = next;}return prev;
}//牛客这道题不支持用C语言答题
//虽然我们还没有学C++,但是C++是兼容C的
//直接用C的方式写代码即可
class PalindromeList
{
public:bool chkPalindrome(ListNode* head){struct ListNode* list1 = head;struct ListNode* mid = middleNode(head);struct ListNode* list2 = reverseList(mid);while (list2 != NULL){if (list1->val != list2->val){return false;}list1 = list1->next;list2 = list2->next;}return true;}
};
提交代码:

成功通过
怎么样,大家看到这里把这三道题弄懂了吗?如果有问题可以在评论区留言哦 :D
本文完
相关文章:
【数据结构】反转链表、链表的中间节点、链表的回文结构(单链表OJ题)
正如标题所说,本文会图文详细解析三道单链表OJ题,分别为: 反转链表 (简单) 链表的中间节点 (简单) 链表的回文结构 (较难) 把他们放在一起讲的原因是: 反转链…...
Python爬虫-抓取的目标数据为#x开头,怎么解决?
前言 本文是该专栏的第4篇,后面会持续分享python爬虫案例干货,记得关注。 在做爬虫项目的时候,有时候抓取的平台目标数据为&#x开头,如下图所示: 浏览器显示的正常数据,但通过爬虫协议获取到的网页源码数据却是以&#x开头的隐藏数据,遇到这种情况,爬虫需要怎么处…...
短视频账号矩阵系统/技术开发搭建私有部署
本系统是基于短视频领域的新一代系统,旨在提供一个高效、全面的短视频管理与分发平台。系统采用先进的开发算法和技术,实现了智能化视频分类、推荐和用户互动功能。 目录 一、抖音SEO账号矩阵系统的开发和部署遵循以下原则: 二、账号矩阵绑…...
光致发光二极管光源——荧光效率检测系统
发光二极管(LED)光源已经逐步地取代传统光源,并在生产和生活中得以广泛应用。荧光粉在LED照明设备中起到了至关重要的作用,其功能为将转换芯片所产生的紫外或者蓝光,发射出目标颜色的光。近年来,人们为了提…...
【手撕C语言】多线程
(꒪ꇴ꒪ ),Hello我是祐言QAQ我的博客主页:C/C语言,Linux基础,ARM开发板,软件配置等领域博主🌍快上🚘,一起学习,让我们成为一个强大的攻城狮!送给自己和读者的一句鸡汤🤔&…...
Dubbo2-概述
Dubbo 阿里公司开源的一个高性能,轻量级的javaRPC(远程服务调用方案)框架,提供高性能远程调用方案以及SOA服务治理方案 Dubbo架构 节点角色说明: Provider:服务提供方 Container:服务运行容器 Consumer:调用远程服务…...
【将回声引入信号中】在语音或音频文件中引入混响或简单回声,以研究回声延迟和回波幅度对生成的回波信号感知的影响(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
pythonocc进阶学习:投影projection
1.点 到 线,(直线,曲线)等上的投影 staticmethod # 点到Lin的投影 def Project_Pnt_To_Lin(p: gp_Pnt, lin: gp_Lin):Edge BRepBuilderAPI_MakeEdge(lin).Edge()curve BRep_Tool.Curve(Edge)proPnt GeomAPI_ProjectPointOnCurve(p, curve[0])Neares…...
Scractch3.0_Arduino_ESP32_学习随记_显示网络天气(二)
这里写目录标题 目的器材程序联系我们 目的 通过C02获取网络天气。并在屏上显示 器材 硬件: 齐护机器人C02 购买地址 软件: scratch3.0 下载地址:官网下载 程序 使用的是公开免费的API,对请求间隔和次数有限制,如果连续获取可能会被封IPÿ…...
Mysql压力测试(sysbench)
目录 配置项目环境: 参考:采用sysbench压测mysql详解_dream21st的博客-CSDN博客 实验步骤: 1、安装sysbench工具 2、在master上创建用户和库,配置用户的权限可以使他可以访问库(Mysql的主从复制) 3、基…...
TBDS MPP参数列表
TBDS MPP参数列表 namesettingdescriptionapplication_namessqlSets the application name to be reported in statistics and logs.archive_cleanup_commandSets the shell command that will be executed at every restart point.archive_command(disabled)Sets the shell co…...
C# OpenCvSharp 读取rtsp流
效果 项目 代码 using OpenCvSharp; using OpenCvSharp.Extensions; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using Syste…...
每日后端面试5题 第七天
一、内连接和外连接查询有什么区别? 内连接只查询出两表的交集; 外连接会查询出某表的全部与两表的交集。 二、Nginx的作用 1.反向代理 前端把请求发送给nginx,再由nginx将请求发送给后端服务器。 2.负载均衡 提高访问速度;…...
计算机视觉的应用10-图片中的表格结构识别与提取实战
大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用10-图片中的表格结构识别与提取实战,表格结构识别在信息处理领域中具有广泛应用,但由于表格的多样性和复杂性,以及难以准确解析的布局和格式,传统的方…...
P4178 Tree (点分治)
题目链接 一:我们考虑树上两点之间的路径有什么情况 1:经过根节点(即在根节点的两端) 2:不经过根节点(完全在一颗子树的一侧) 二:我们考虑这两种路径是否可以归为一类 1࿱…...
Kubernetes 二进制搭建
Kubernetes 二进制搭建 一、二进制搭建 Kubernetes v1.201.1 部署准备1.2 操作系统初始化配置1.3 部署 etcd 集群1.3.1 etcd 作为服务发现系统,有以下的特点1.3.2 准备签发证书环境1.3.3 在 master01 节点上操作1.3.4 生成证书 1.4 部署 docker引擎1.4.1 部署 Maste…...
QT QtXlsx安装使用
QtXlsx介绍 QtXlsx是一个可以读取和写入Excel文件的库。它不需要Microsoft Excel,可以在Qt5支持的任何平台上使用。 这里一定是需要QT5支持的。 须知安装QtXlsx时,需要下载perl 1.安装perl 这里选择官网下载安装即可。 官网地址:https://p…...
Java医院信息化HIS管理系统源码
HIS模板分为两种:病历模板和报表模板。模板管理是运营管理的核心组成部分,是基层卫生健康云中各医疗机构定制电子病历和报表的地方,各医疗机构可根据自身特点特色定制电子病历和报表,制作的电子病历及报表可直接在业务系统中使用。…...
【Uni-App】uview 开发多端应用,密码显示隐藏功能不生效问题
出现的问题: 使用uview组件u-input框密码绑定时会出现右侧密码显隐图标不显示的问题 思路: 1.看了下uview源码,发现这有一段注释,我们需要把源码修改一下,问题出在这里 这行代码修改为 :password"password || …...
人工智能算法-SVM, KNN
目录 SVM, KNN区别 一、KNN算法概述 算法的描述: 二、关于K的取值 K的取法: 三、关于距离的选取 Euclidean Distance 定义: 四、总结 SVM, KNN区别...
拆解一台VPX-305加固机箱:聊聊3U VPX背板设计、电源选型与散热那些坑
3U VPX加固机箱设计实战:从背板拓扑到散热优化的工程密码 当军用电子设备遇上戈壁滩的沙尘暴,或是舰载系统遭遇高盐雾腐蚀环境,普通商用硬件往往会在几小时内宣告罢工。这正是VPX加固机箱存在的意义——它不仅是一层金属外壳,更是…...
Keras性能优化秘籍:20个专业技巧加速模型训练流程
Keras性能优化秘籍:20个专业技巧加速模型训练流程 【免费下载链接】keras Deep Learning for humans 项目地址: https://gitcode.com/GitHub_Trending/ke/keras Keras作为"Deep Learning for humans"的热门框架,其简洁的API设计让深度学…...
7个AFFiNE代码审查最佳实践:提升协作效率与代码质量的完整指南
7个AFFiNE代码审查最佳实践:提升协作效率与代码质量的完整指南 【免费下载链接】AFFiNE There can be more than Notion and Miro. AFFiNE(pronounced [ə‘fain]) is a next-gen knowledge base that brings planning, sorting and creating all together. Privacy…...
AEUX插件终极指南:3步实现Figma到After Effects的无缝动效转换
AEUX插件终极指南:3步实现Figma到After Effects的无缝动效转换 【免费下载链接】AEUX Editable After Effects layers from Sketch artboards 项目地址: https://gitcode.com/gh_mirrors/ae/AEUX 你是否曾为将Figma中的精美设计手动重建到After Effects而苦恼…...
如何5分钟搭建个人番茄小说图书馆:终极离线阅读解决方案
如何5分钟搭建个人番茄小说图书馆:终极离线阅读解决方案 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 你是否遇到过这种情况?在地铁上网络信号断断续…...
C4D R26全新界面实战:手把手教你自定义工作区,效率提升200%
C4D R26全新界面实战:手把手教你自定义工作区,效率提升200% 从R21/R25升级到R26的用户,第一反应往往是"我的工具栏去哪了?"。这个版本彻底重构了界面逻辑,将原先分散的功能模块重组为情境化工作区——这既是…...
告别抓包失败!用VirtualXposed+JustTrustMe搞定Android 10+的HTTPS流量(保姆级图文)
突破Android高版本HTTPS抓包困境:VirtualXposedJustTrustMe实战指南 移动应用开发与安全测试中,HTTPS流量分析是必不可少的环节。但自Android 7.0引入网络安全配置后,特别是Android 10及以上版本强化了证书固定(SSL Pinning&#…...
C#处理时间戳别再踩坑了!秒与毫秒转换的3个常见错误与最佳实践
C#时间戳处理避坑指南:从UTC混淆到性能优化的实战解决方案 凌晨三点,你盯着屏幕上显示的时间戳数据,发现比预期晚了8小时——这不是时区幻觉,而是C#时间戳处理中典型的UTC陷阱。作为.NET开发者,时间戳与DateTime的转换…...
leetcode 80.删除有序数组中的重复项
题目: 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件…...
2026年Java后端开发技能树(附学习路线图)
2026年Java后端开发技能树:掌握未来技术的关键路径 在数字化转型加速的2026年,Java后端开发依然是企业级应用的核心支柱。随着云原生、AI集成和微服务架构的普及,开发者需要系统化更新技术栈。本文将通过一份2026年Java后端开发技能树&#…...
