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

news2024/12/28 18:40:09

🎉🎉🎉欢迎莅临我的博客空间,我是池央,一个对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;
    }
};

持续更新中...

敬请期待

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

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

相关文章

传输层——UDP

在学习计算机网络的过程中,我们知道OSI七层协议模型,但是在实际开发应 用中我们发现OSI七层协议模型并不适合实施,因为OSI上三层通常都是由开 发人员统一完成的,这三层之间在实现过程中没有一个明确的界限,所以我 们更…

Windows平台C#版RTSP转RTMP直播推送定制版

技术背景 前几年我们发布了C版的多路RTMP/RTSP转RTMP转发官方定制版。在秉承低延迟、灵活稳定、低资源占用的前提下,客户无需关注开发细节,只需图形化配置转发等各类参数,实现产品快速上线目的。 如监控类摄像机、NVR等,通过厂商…

关于堆排序

今天我们不刷力扣了,我们来复习(手撕)一下数据结构中的八大排序算法之一,堆排序 基本概念: 堆是一种特殊的树形数据结构,即完全二叉树。 堆分为大顶堆和小顶堆: 大顶堆:每个节点的值…

手机上制作证件照

最近由于需要给老姐弄一组证件照,找了一通手机上的软件,找到一款性价比较高的,详细流程记录下来。vx小程序上搜索"泰世茂证件照",打开首页如下图所示∶ 单击"开始制作" ,选择一个证件照类别&#…

Python中Web开发-FastAPI框架

大家好,在当今Web开发领域,高性能、易用性和可扩展性是开发者们追求的目标。Python作为一种流行的编程语言,在Web开发领域也有着强大的影响力。而在众多的Python Web框架中,FastAPI凭借其快速、现代和易用的特性,成为了…

语雀——云知识库/笔记

对于日常进行学习/创作或是记录学习、工作内容与心得的群体来说,能够及时同步的云笔记应用有着广泛的应用场景。近期,我也探索了许多款不同的软件应用,今天来分享一款很有特点的应用——语雀。 语雀,为每一个人提供优秀的文档和知…

docker-file 网络

docker挂载 1.绑定挂载(Bind Mounts):绑定挂载是将主机上的文件或目录挂载到容器中。 docker run -v /host/path:/container/path image_name 2.卷挂载(Volume Mounts):卷挂载将 Docker 数据卷挂载到容器中…

[数据结构1.0]计数排序

读者老爷好,本鼠鼠最近学了计数排序,浅浅介绍一下! 目录 1.统计相同元素出现次数 2.根据统计的结果将序列回填到原来的序列中 3.相对映射计数排序 计数排序又称为鸽巢原理,是对哈希直接定址法的变形应用,是非比较排…

AI语音及其应用

文章目录 一、基本认识二、AI语音应用场景三、真人录音与AI配音的区别四、AI语音创作基本步骤 本文将简单了解下AI语音、应用场景及其优势和创作核心步骤。 一、基本认识 AI语音是指基于人工智能技术开发的语音识别和语音合成系统。语音识别是指计算机识别和理解人类语音的能力…

决定了,将ChatGPTer开源!主打一个大模型人人可用。

一个快速上手且极易部署的类ChatGPT开源应用,可接入 OPENAI API 或 通义千问API 开源地址: https://github.com/isnl/EsChat 大声(偷偷)告诉你:通义千问有免费API额度可白嫖!!! 版本特性 OPENAI 和 通义千…

北航提出part2whole:可控⼈体图像⽣成的统⼀参考框架,可从任何数量和不同来源的参考人体部位图像中生成逼真的、高质量的各种姿势的人体人物图。

Parts2Whole,它可以从任何数量和不同来源的参考人体部位图像中生成逼真的、高质量的各种姿势的人体人物。我们的方法保持了与相应条件语义区域的高度一致性,同时保证了整体之间的多样性和协调性。 (a)以不同人的参考图像为条件生成人的图像。每对包括4个…

6.Redis之String命令

1.String类型基本介绍 redis 所有的 key 都是字符串, value 的类型是存在差异的~~ 一般来说,redis 遇到乱码问题的概率更小~~ Redis 中的字符串,直接就是按照二进制数据的方式存储的. (不会做任何的编码转换【讲 mysql 的时候,知道 mysql 默认的字符集, 是拉丁文,插入中文…

ChatGLM2-6B 模型基于 [P-Tuning v2]的微调

ChatGLM2-6B-PT 一、介绍 1、本文实现对于 ChatGLM2-6B 模型基于 [P-Tuning v2](https://github.com/THUDM/P-tuning-v2) 的微调 2、运行至少需要 7GB 显存 3、以 [ADGEN](https://aclanthology.org/D19-1321.pdf) (广告生成) 数据集为例介绍代码的使用方法。 模型部署参考…

OC笔记之foundation框架

OC学习笔记(三) 文章目录 OC学习笔记(三)常用Foundation框架结构体NSRangeNSRange结构体的定义定义 NSRange 的方法打印Range的相关信息NSRange的实际运用查找子字符串返回NSRange结构体 NSPointNSRect NSStringNSString的创建NSS…

Python文件操作(Excel、PDF、XML、Word)

大家好,在现代数据驱动的世界中,对于数据的处理和管理是至关重要的。Python作为一种强大而灵活的编程语言,提供了丰富的工具和库来处理各种文件格式。本文将探讨Python中的文件操作,重点介绍如何使用Python处理Excel、PDF、XML和W…

【python】python tkinter 计算器GUI版本(模仿windows计算器 源码)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

每日一题《leetcode--2816.翻倍以链表形式表示的数字》

https://leetcode.cn/problems/double-a-number-represented-as-a-linked-list/ 这里我们直接模拟翻倍后链表的数字,首先我们得先考虑链表的头结点的值是否大于4(*2后是否需要进位)。 处理完头结点后,就需要考虑其余结点。因为求的是链表中每个结点翻倍后…

这个开源的多模态模型无敌。。。

InternVL 由 OpenGVLab 开发,是一个开源的多模态对话模型,其性能接近商业化的 GPT-4V 模型。 GPT-4V 是 OpenAI 去年推出的多模态模型,使用它你可以分析所需的任何类型的图像并获取有关该图像的信息。 1. InternVL 开源模型 而今天的主角研究…

基于python实现的深度学习web多格式纠错系统

基于python实现的深度学习web多格式纠错系统 开发语言:Python 数据库:MySQL所用到的知识:Django框架工具:pycharm、Navicat、Maven 系统功能实现 用户登录 登录功能是本系统一个非常重要的功能,这极大的保护了系统的安全。登录…

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

序 本篇是杂谈以及准备工作(此处应无掌声) 暂时不管iOS(因为开发hello world都要年费) 软件: Visual Studio 2019(含Android SDK和NDK编译器等) OpenCV 这是一个女仆级的系列文章&#xf…