经典链表题-链表回文结构

🎉🎉🎉欢迎莅临我的博客空间,我是池央,一个对C++和数据结构怀有无限热忱的探索者。🙌

🌸🌸🌸这里是我分享C/C++编程、数据结构应用的乐园✨

🎈🎈🎈期待与你一同在编程的海洋中遨游,探索未知的技术奥秘💞

📝专栏指路:

📘【C++】专栏:深入解析C++的奥秘,分享编程技巧与实践。

📘【数据结构】专栏:探索数据结构的魅力,助你提升编程能力。

链表的回文结构

温馨小提示:点击即可做题,想回顾链表知识可以点击单链表和双链表。

必知知识:回文数

回文数是指一个整数,无论从左到右读还是从右到左读,其数字序列都是相同的。

题目:

9b2ec20c11844f5489e8e12c51a7a07f.png

画图分析:

47922433f88549ada8e98ec4b63e51f3.png

题目思路分析:

1.先找出中间节点

链表的中间节点(点击即可做题)找中间节点力扣上直接有这个题目,我们以此来分析思路

1347c78dc94e40c485214cc9fbea015b.png

解决思路:快慢指针

快指针走两步,慢指针走一步

奇数个节点快指针的next指针为空时,慢指针刚好走到链表的中间节点

偶数个节点快指针为空时,慢指针刚好走到链表的中间节点

65e1c6b5af5b4dcc96c03e0c462f2295.png

代码实现

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/typedef struct ListNode ListNode;
struct ListNode* middleNode(struct ListNode* head) {//创建快慢指针,快指针走两步,慢指针走一步ListNode*fast,*slow;fast=head;slow=head;while(fast&&fast->next)//不可以换位置,在链表节点偶数个结束循环是fast==NULL,//交换位置会对空指针解引用{slow=slow->next;fast=fast->next->next;}return slow;
}

2.反转链表

反转链表(点击即可做题)找中间节点力扣上直接有这个题目,我们以此来分析思路

c05058c489fc428da6b988732539cd01.png

解决思路:迭代

假设链表为 1→2→3→∅我们想要把它改成 ∅←1←2←3

我们需要定义三个指针

一个指针初始化为空

一个指针指向原链表的头结点

一个指针指向原链表头结点的next指针指向的节点

代码实现


struct ListNode*reverse(struct ListNode*head)
{if(head==nullptr||head->next==nullptr)//只有一个节点或链表为空{return head;}struct ListNode*n1,*n2,*n3;n1=nullptr;n2=head;n3=n2->next;//保存当前节点的next指针while(n2){n2->next=n1;//当前节点的next指针指向前一个节点n1=n2;n2=n3;if(n3)//n3最先为空此时n2还没有为空没有出循环,不能对空指针n3解引用n3=n3->next;}return n1;
};

最后我们来实现一下

链表回文结构的代码

// typedef struct ListNode ListNode;
// struct ListNode {
//     int val;
//     struct ListNode* next;
//     ListNode(int x) : val(x), next(NULL) {}
// };//寻找中间节点,快慢指针
struct ListNode*middleNode(struct ListNode*head)
{struct ListNode*fast,*slow;fast=head;slow=head;while(fast&&fast->next){slow=slow->next;fast=fast->next->next;}return slow;};
//翻转链表
struct ListNode*reverse(struct ListNode*head)
{if(head==nullptr||head->next==nullptr)//只有一个节点或链表为空{return head;}struct ListNode*n1,*n2,*n3;n1=nullptr;n2=head;n3=n2->next;while(n2){n2->next=n1;n1=n2;n2=n3;if(n3)//n3最先为空此时n2还没有为空没有出循环,不能对空指针n3解引用n3=n3->next;}return n1;
};class PalindromeList {public:bool chkPalindrome(ListNode* A) {struct ListNode*mid=middleNode(A);struct ListNode*rmid=reverse(mid);while(A&&rmid){if(A->val!=rmid->val){return false;}A=A->next;rmid=rmid->next;}return true;}
};

补充拓展

回文数是在数学中具有特殊的性质,也常被用于各种有趣的数学游戏和谜题中。

以下是关于回文数的几个关键点:

1.定义:设n是一个任意自然数,如果将其各位数字反向排列后得到的自然数n1与n相等,那么n就被称为回文数。例如,121、1331和12321都是回文数。
特征:
2.对称性:回文数的最大特点就是其对称性,无论从左到右还是从右到左读,数字序列都是相同的。
3.有限性:尽管正整数集是无限的,但回文数集却是有限的。对于任意给定的位数n,只有有限个n位回文数存在。例如,对于两位数,只有9个回文数(11、22、33、...、99)。
4.递增性:随着位数的增加,回文数的数量也呈现出递增的趋势。但这种递增并不是线性的,因为随着位数的增加,符合条件的回文数数量增长速度逐渐减慢。
5.生成方式:回文数可以通过多种方式生成。一种简单的方法是将一个数字反转后与原数字相加,重复这个过程直到得到一个回文数为止。例如,从数字4开始,我们得到4+4=8,8是回文数;从数字6开始,我们得到6+9=15,15不是回文数,但51+15=66,66是回文数。
6.数量统计:
1位数的回文数有9个(不包括0),它们的和是45。
2位数的回文数有9个,分别是11、22、33、...、99,它们的和是495。
3位数的回文数有90个,它们的和是49500。
7.应用:
在数学中,回文数是一种特殊的整数,研究回文数可以揭示整数的一些特殊性质和规律。例如,回文数和质数、完全平方数等数学概念相结合,可以产生一些有趣的数学问题和挑战。
在密码学和信息安全领域,回文数被用来构造强密码和加密算法,可以在一定程度上保证信息的加密和解密过程的安全性。
在诗歌、音乐等文化艺术中,回文数也具有一定的音韵美感和意象意义,可以用来构成一些优美的诗歌、歌词等。
 

持续更新中...

敬请期待

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

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

相关文章

神经网络的工程基础(一)——利用PyTorch实现梯度下降法

相关说明 这篇文章的大部分内容参考自我的新书《解构大语言模型:从线性回归到通用人工智能》,欢迎有兴趣的读者多多支持。 本文涉及到的代码链接如下:regression2chatgpt/ch06_optimizer/gradient_descent.ipynb 本文将讨论利用PyTorch实现…

BFS 解决最短路问题

目录 一、前言 1.1 如何使用 BFS 找到最短路: 1.2 为什么不用 dfs : 二、模板套路 三、例题练习 3.1 例题1:迷宫中离入口最近的出口 3.2 例题2:最小基因变化 3.3 例题3:单词接龙 3.4 例题4:为高尔…

HTML橙色爱心

目录 写在前面 准备开始 完整代码 运行结果 系列文章 写在后面 写在前面 本期小编给大家分享一颗热烈且浪漫的爱心,快来看看吧! 准备开始 在开始之前,我们需要先简单的了解一下这颗爱心的原理哦~ 本期将用html实现这颗跳动的爱心&a…

YOLOv9改进策略 | 图像去雾 | 利用图像去雾网络UnfogNet辅助YOLOv9进行图像去雾检测(全网独家首发)

一、本文介绍 本文给大家带来的改进机制是利用UnfogNet超轻量化图像去雾网络,我将该网络结合YOLOv9针对图像进行去雾检测(也适用于一些模糊场景),我将该网络结构和YOLOv9的网络进行结合同时该网络的结构的参数量非常的小,我们将其添加到模型里增加的计算量和参数量基本可…

跨平台之用VisualStudio开发APK嵌入OpenCV(二)

开始干 新建解决方案,新建动态库(Android)项目 功能随便选一个吧,就模仿PS(Photoshop)的透视裁切功能,一个物体(比如扑克牌)透视图,选4个顶点,转…

python文件处理之os模块和shutil模块

目录 1.os模块 os.path.exists(path):文件或者目录存在与否判断 os.path.isfile(path):判断是否是文件 os.path.isdir(path):判断是否是文件夹 os.remove(path):尝试删除文件 os.rmdir(path):尝试删除目录 os.m…

vue项目elementui刷新页面弹窗问题

bug:每次刷新页面都有这个鬼弹窗。 刚开始以为是自己的代码问题,于是我翻遍了每一行代码,硬是没找出问题。 后来在网上找了些资料,原来是引入的问题。 解决方案: 改一下引入方式即可。 错误姿势 import Vue from …

美发店服务预约会员小程序的作用是什么

美发店不同于美容美甲,男女都是必需且年龄层几乎不限,商家在市场拓展时只要方法得当相对比较容易,当今客户适应于线上信息获取、咨询及实际内容开展,商家也需要赋能和提升自身服务效率,合理化管理。 运用【雨科】平台…

2024年【高压电工】新版试题及高压电工找解析

题库来源:安全生产模拟考试一点通公众号小程序 高压电工新版试题是安全生产模拟考试一点通生成的,高压电工证模拟考试题库是根据高压电工最新版教材汇编出高压电工仿真模拟考试。2024年【高压电工】新版试题及高压电工找解析 1、【单选题】 110KV及以下…

文件批量重命名利器:一键轻松替换文本间内容,高效管理文件不再是难题!

在信息爆炸的时代,我们的电脑中堆积了无数的文件。这些文件可能包含重要的工作资料、珍贵的个人回忆或是各种学习资料。然而,随着文件的不断增多,如何高效地管理和查找这些文件成为了一个头疼的问题。 文件批量改名高手是一款专业的文件管理…

在IDEA中配置servlet(maven配置完成的基础下)

在IDEA中配置servlet&#xff08;maven配置完成的基础下&#xff09; 1.先新建一个项目 2.选择尾巴是webapp的&#xff0c;名称自定义 3.点击高级设置&#xff0c;修改组id 点击创建&#xff0c;等待jar包下载完成。在pom.xml中配置以下 <dependency><groupId>ja…

docker同步bilibili收藏视频到群晖,可配合emby

作者是amtoaer&#xff0c;在github项目地址&#xff1a;https://github.com/amtoaer/bili-sync 有两个版本&#xff0c;1.0和2.0&#xff0c;我使用的是2.0 PS2&#xff1a;2.0和1.0版本目录结构不兼容&#xff0c;所以部署后会全量重新下载视频。 演示&#xff1a; 依然是…

OpenH264 编解码器介绍

思科 思科系统&#xff08;英语&#xff1a;Cisco Systems, Inc.&#xff09;是一间跨国际综合技术企业&#xff0c;总部设于加州硅谷&#xff1b;思科开发、制作和售卖网络硬件、软件、通信设备等高科技产品及服务&#xff0c;并透过子公司&#xff08;例子有OpenDNS、Webex、…

国赛练习(1)

Unzip 软连接 软连接是linux中一个常用命令&#xff0c;它的功能是为某一个文件在另外一个位置建立一个同步的链接。换句话说&#xff0c;也可以理解成Windows中的快捷方式 注意&#xff1a;在创建软连接的文件的所有目录下不能有重名的文件 打开环境&#xff0c;是文件上传&am…

用实践结果告诉你为啥说 CloudFlare 是赛博菩萨?

最近几天明月都没有更新博客了,主要是接了几个 CloudFlare 代维配置的活儿,有需要加速优化的,有需要排除疑难故障的,有需要提高防御攻击能力的甚至还有纯粹为了体验“打不死”装逼需要的。总之,各种各样的需求,五花八门的,好在 CloudFlare 都能一一满足,最主要的是这些…

Dockerfile使用

1.Dockerfile是什么 官网地址 https://docs.docker.com/reference/dockerfile/概念 是什么 Dockerfile 是用于构建 Docker 镜像的文本文件&#xff0c;它包含一系列的指令&#xff08;instructions&#xff09;和参数&#xff0c;用于描述如何构建和配置镜像。 Dockerfile 是…

解析售后维修服务平台如何助力企业高效运营与决策

随着生活质量的不断提高&#xff0c;人们对于售后服务的要求也越来越多。因此&#xff0c;售后服务已经成为企业竞争力的重要组成部分。售后服务平台作为连接企业与消费者的桥梁&#xff0c;不仅关乎着消费者的满意度&#xff0c;而且直接影响着企业的品牌形象与市场地位。那么…

[7] CUDA之常量内存与纹理内存

CUDA之常量内存与纹理内存 1. 常量内存 NVIDIA GPU卡从逻辑上对用户提供了 64KB 的常量内存空间&#xff0c;可以用来存储内核执行期间所需要的恒定数据常量内存对一些特定情况下的小数据量的访问具有相比全局内存的额外优势&#xff0c;使用常量内存也一定程序上减少了对全局…

使用python对指定文件夹下的pdf文件进行合并

使用python对指定文件夹下的pdf文件进行合并 介绍效果代码 介绍 对指定文件夹下的所有pdf文件进行合并成一个pdf文件。 效果 要合并的pdf文件&#xff0c;共计16个1页的pdf文件。 合并成功的pdf文件&#xff1a;一个16页的pdf文件。 代码 import os from PyPDF2 import …