【数据结构OJ题】链表的回文结构

news2024/12/22 23:49:53

原题链接:https://www.nowcoder.com/practice/d281619e4b3e4a60a2cc66ea32855bfa?tpId=49&&tqId=29370&rp=1&ru=/activity/oj&qru=/ta/2016test/question-ranking

目录

1. 题目描述

2. 思路分析

3. 代码实现


1. 题目描述

 

2. 思路分析

在做这道题之前,我们首先得知道什么是“回文”。

回文就是指正读和反读都相同的字符序列为“回文”,如“abba”、“abccba”、12321123321是“回文”,“abcde”和“ababab”则不是“回文”。

知道了回文的意思后,我们开始分析题目!

先找到中间结点,然后把后半部分逆置,最后对前后两部分一一比对如果结点的值全部相同,则即为回文否则就不是回文

如果链表是回文结构如下图(左半部分为奇数个结点的情况,右半部分为偶数个结点的情况)

如果有小伙伴不知道怎么求链表的中间结点,可以看看这篇文章:

https://blog.csdn.net/m0_62531913/article/details/132309395?spm=1001.2014.3001.5502

如果有小伙伴不知道怎么将链表逆置,可以看看这篇文章:

https://blog.csdn.net/m0_62531913/article/details/132297310?spm=1001.2014.3001.5502

3. 代码实现

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};*/
class PalindromeList {
public:
    struct ListNode* middleNode(struct ListNode* head){
        struct ListNode *slow=head,*fast=head;
        while(fast&&fast->next)
        {
            slow=slow->next;
            fast=fast->next->next;
        }
        return slow;
    }
    struct ListNode* reverseList(struct ListNode* head){
        struct ListNode *n1,*n2,*n3;
        n1=NULL;
        n2=head;
        if(n2)
            n3=n2->next;
        while(n2)
        {
            n2->next=n1;
            n1=n2;
            n2=n3;
            if(n3)
                n3=n3->next;
        }
        return n1;
    }
    bool chkPalindrome(ListNode* head) {
        struct ListNode* mid=middleNode(head);
        struct ListNode* rmid=reverseList(mid);
        while(head&&rmid)
        {
            if(head->val!=rmid->val)
            {
                return false;
            }
            else
            {
                head=head->next;
                rmid=rmid->next;
            }
        }
        return true;
    }
};

 

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

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

相关文章

EMO实战:使用EMO实现图像分类任务(一)

文章目录 摘要安装包安装timm安装 grad-cam安装einops 数据增强Cutout和MixupEMA项目结构计算mean和std生成数据集 摘要 论文翻译:https://blog.csdn.net/m0_47867638/article/details/132034098?spm1001.2014.3001.5501 官方源码:https://github.com/…

uniapp项目APP云打包步骤

1.打开hbuilder工具,选择uniapp项目,从上方工具中选择发行 2.证书的生成,点击上面的如何生成证书的网址,按照步骤进行生成: 3.结果,点击打开所在目录,点击直接安装到手机,前提是手机…

excel日期函数篇1

1、DAY(serial_number):返回序列数表示的某月的天数 在括号内给出一个时间对象或引用一个时间对象(年月日),返回多少日 下面结果都为20 2、MONTH(serial_number):返回序列数表示的某年的月份 在括号内给出一个时间对…

重新认识小米

被镁光灯聚焦的企业,总是会被贴上各种标签。 8月14日,小米科技创始人雷军以“成长”为主题的年度演讲,刷遍社交网络。提到小米,你首先想到什么?手机发烧友、极致性价比,还是最年轻的500强? 这…

手撕单链表

目录 链表的概念和结构 单链表的实现 申请新结点 打印 尾插 头插 尾删 头删 ​编辑 查找 在pos位置前插入元素 在pos位置后插入元素 删除pos位置的元素 删除pos位置之后的位置的元素​编辑 完整代码 SListNode.h SListNode.c 链表的概念和结构 链表是一种物理存储…

VS2022如何查看类成员都在哪里被调用了(VS如何打开Call Hierarchy视图)

文章目录 打开Call Hierarchy视图查看成员的调用 打开Call Hierarchy视图 单击菜单栏的“视图” > “调用层次结构”,即可打卡Call Hierarchy视图。 查看成员的调用 在代码编辑窗口,右键单击想要查看的类成员,然后选择“查看调用层次结…

2003-2021年全国30省市数字关注度数据

1、时间:2003-2021年 2、来源:政府工作报告 3、范围:30省市 不含西藏、其中2004年吉林缺失 4、指标:省份、年份、一级指标、二级指标、关键词、关键词词频、全文词频 5、词频:选取大数据、云计算、区块链、人工智能…

解决一直提示No module named “Crypto” 解决方案

今天跑脚本发现一直提示装Crypto包 已经装好了情况下还是这样: 解决方法: pip uninstall crypto pycryptodome pip install pycryptodome pycrypto和crypto是同一个库,crypto在 python 中又被称为pycrypto,它是一个第三方库&…

归并排序(C++ mpi 并行实现)

文章目录 主要思路1. 串行归并排序2. 进程的分发3. 对接收到的子数组进行排序4. 合并数组5.输出排序后的数组6.进程分发部分的优化7.完整代码 主要思路 我们首先实现串行的归并排序;实现进程的分发;排序其中的每个子部分;进程的合并通信&…

宝藏级画图工具-drawio

今天推荐一款非常好用的免费开源画图工具drawio. Drawio即可以下载安装到本地,也可以在线编辑,在线编辑网址为 https://app.diagrams.net/。 本地版下载地址为https://github.com/jgraph/drawio-desktop/releases 1、支持各类图形 Drawio可以非常便捷…

Docker服务编排Docker Compose介绍

1.服务编排概念 2.Docker Compose介绍 3.Docker Compose安装及使用

【【STM32----I2C通信协议】】

STM32----I2C通信协议 我们会发现I2C有两根通信线: SCL和SDA 同步 半双工 带数据应答 支持总线挂载多设备(一主多从,多主多从) 硬件电路 所有I2C设备的SCL连在一起,SDA连在一起 设备的SCL和SDA均要配置成开漏输出模式 …

MySQL— 基础语法大全及操作演示!!!(下)

MySQL—— 基础语法大全及操作演示(下)—— 持续更新 三、函数3.1 字符串函数3.2 数值函数3.3 日期函数3.4 流程函数 四、约束4.1 概述4.2 约束演示4.3 外键约束4.3.1 介绍4.3.2 语法4.3.3 删除/更新行为 五、多表查询5.1 多表关系5.1.1 一对多5.1.2 多对…

hdu8-Congruences(中国剩余定理)

Problem - 7363 (hdu.edu.cn) 参考:2023杭电暑假多校8 题解 3 5 7 10 | JorbanS_JorbanS的博客-CSDN博客 题解:(中国剩余定理 增量法) 注意验证和特判,此题中 pi 两两互质,可用CRT和增量法,当…

ipkvm之RK3568高温测试

1. 简介 KVM高温测试描述: 将KVM主板放入50℃的温箱中放置4个小时。四个小时后记录VGA小板的温度以及SOC温度和外壳温度。 测试仪器: 两块KVM主板,温度记录仪,两个串口,笔记本,电源 KVM主板上电和串口 …

【回溯】总结

1、 组合和子集问题 组合问题需要满足一定要求才算作一个答案,比如数量要求(k个数),累加和要求(target)。 子集问题是只要构成一个新的子集就算作一个答案。 进阶:去重逻辑。 一般都是要对同…

星际争霸之小霸王之小蜜蜂(二)--类的使用

目录 前言 一、将设置内容写在一个类里 二、设置小蜜蜂的造型 三、设置猫蜜蜂的参数 四、绘制猫蜜蜂到窗口 总结 前言 昨天我们设置好了窗口,下面我们需要向窗口中添加元素了。 一、将设置内容写在一个类里 我个人理解书上的意思是要创建一个类,将所有需…

厘米级定位技术主要有以下几种

厘米级定位技术主要有以下几种: 1.UWB (Ultra-Wideband) 定位技术:UWB技术使用一组频带非常宽的无线电脉冲来实现高精度定位,可以实现亚米级的定位精度,甚至在理想条件下可以达到厘米级的定位精度。 2.RTK (Real-Time Kinematic…

python3 0基础学习----基本知识

0基础学习笔记之基础知识 📚 基础内容1. 条件语句 if - elif - else2. 错误铺捉try - except(一种保险策略)3. 四种开发模式4. 函数:def用来定义函数的5. 最大值最小值函数,max ,min6. is 严格的相等,is no…

Vault主题 - UiCore多用途Elementor WordPress主题

你可以使用Vault主题 – UiCore多用途Elementor WordPress主题构建什么? Vault主题拥有专业、像素级完美且干净的现代布局,几乎适合您需要的任何网站: 小型企业网站企业网站着陆页面权威博客销售和营销页面网上商店 自由职业者的最佳选择 …