nowcoder——回文结构

news2025/1/20 3:49:12

 链表的回文结构_牛客题霸_牛客网 (nowcoder.com)

我们来分析该题:我们首先要清楚什么是回文结构?其实就是对称结构。如果一个链表呈对称结构就说明该链表具有回文结构。 下面给上一些例子:

那我们怎么判断该链表是否属于回文结构呢?

思路1:将链表元素放到数组中,然后定义两个指针分别从头部和尾部开始遍历,如果对应位置上的元素相等就说明该链表属于回文结构。这个思路虽然可以解决问题,但是题目给出了空间复杂度为O(1)的限制,所以该方法不可行。

思路2: 我们首先找到链表的中间节点,然后将中间节点之后的链表逆置,然后分别从第一个节点和逆置后的中间节点开始比较,如果对应位置上的元素相同则说明该链表符合回文结构,否则不符合。

画图表示:

有了思路,我们只需要完成第一步和第二步。找到中间节点以及逆置链表。 

找链表的中间节点我在前面已经解答过了我们在这里直接CV即可。没了解过的可以看这篇博客——leetcode——链表的中间节点-CSDN博客。

逆置链表我在前面也已经解答过了我们依旧CV一下。不了解的可以看这篇——leetcode——反转链表-CSDN博客

我们对思路进行了分析也完成了准备工作,现在我们来实现该题目:

class PalindromeList {
public:

    //逆置链表方法
    ListNode* reverseList(ListNode* head)
    {
        //如果原链表为空,直接返回NULL
        if(head == NULL)
        {
            return NULL;
        }

        //原链表不为空
        ListNode*n1 = NULL;
        ListNode*n2 = head;
        ListNode*n3 = head->next;
        while(n2)
        {
            n2->next = n1;
            n1 = n2;
            n2 = n3;
            if(n3!=NULL)
            {
                n3 = n3->next;
            }
        }
        return n1;
    }

    //寻找中间节点方法
    ListNode* middleNode(ListNode* head) 
    {
        ListNode* fast = head;
        ListNode* slow = head;
        while(fast && fast->next)
        {
            fast = fast->next->next;
            slow = slow->next;
        }
        return slow;
    }

    bool chkPalindrome(ListNode* A) 
    {
        ListNode* mid = middleNode(A);
        ListNode* rev = reverseList(mid);
        ListNode*pcur = A;
        while(pcur && rev)
        {  
            if(pcur->val != rev->val)
            {
                return false;
            }
            pcur = pcur->next;
            rev = rev->next;
        }
        return true;
    }
};

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

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

相关文章

基于springboot的代驾管理系统的设计与实现

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式 🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 &…

漫谈ApplicationContext和BeanFactory的区别

各位大佬光临寒舍,希望各位能赏脸给个三连,谢谢各位大佬了!!! 目录 1.背景介绍 2.细述ApplicationContext和BeanFactory 3.总结 1.背景介绍 当我们使用SpringBoot创建项目的时候会看到一串代码&#xff1a…

123.Android 简单的定位和语音识别 免费高德定位 免费语音识别 不需要接入SDK 不需要导入任何的离线包

//免费的定位 高德定位 不需要接入高德SDk也可进行高德定位: //免费的语音识别 不需要接入任何的SDK 也不需要导入任何的离线语音包: //CSDN 小妞得意 //具体代码实现 私聊 //---------------------------------------------------------------END…

Ubuntu 使用nginx部署agular项目

我的front-end是用的webpack,就直接执行的npm run build打包。 完成之后就可以\target\classes\static找到 ,直接把整个static上传到需要部署的地方就可以了。 当然这个打包output路径也是angular.json配置好了的 sudo apt update sudo apt install n…

设计模式之开放封闭原则

文章目录 定义理解 小结 定义 开闭原则规定软件中的对象、类、模块和函数对扩展应该是开放的,但对于修改是封闭的。这意味着应该用抽象定义结构,用具体实现扩展细节,以此确保软件系统开发和维护过程的可靠性。 理解 怎么理解这个呢&#x…

51-48 CVPR 2024 | Vlogger: make your dream a vlog 自编剧制作视频博客

24年1月,上海交大、上海人工智能实验室、中科院联合发布Vlogger:make your dream a vlog。该论文主要工作是生成超过5分钟的视频博客vlog。鉴于现有文本到视频T2V生成方法很难处理复杂的故事情节和多样化的场景,本文提出了一个名为Vlogger的通…

Photoshop 2022 for Mac/win:释放创意,打造专业级的图像编辑体验

在数字图像编辑的世界里,Adobe Photoshop 2022无疑是那颗璀璨的明星。这款专为Mac和Windows用户设计的图像处理软件,以其卓越的性能和丰富的功能,赢得了全球数百万创作者的青睐。 Photoshop 2022在继承前代版本强大功能的基础上,…

Unity图文混排EmojiText的使用方式和注意事项

​​​​​​​ 效果演示: 使用方式: 1、导入表情 2、设置图片格式 3、生成表情图集 4、创建/修改目标材质球 5、测试 修复换行问题 修复前: 修复后: 修复代码: 组件扩展 1、右键扩展 2、组件归类&#…

力扣题目:机器人能否返回原点

力扣题目:机器人能否返回原点 题目链接: 657.机器人能否返回原点 题目描述 代码思路 题目思路很简单,只要L数量等于R,U的数量等于D。 代码纯享版 class Solution {public boolean judgeCircle(String moves) {int LR 0, UD 0;for(int …

贝叶斯分类器详解

1 概率论知识 1.1 先验概率 先验概率是基于背景常识或者历史数据的统计得出的预判概率,一般只包含一个变量,例如P(A),P(B)。 1.2 联合概率 联合概率指的是事件同时发生的概率,例如现在A,B两个事件同时发生的概率,记…

next水和错误

产生原因 应该是和预渲染有关,官方也有谈到 水和错误主要原因 这个主要事服务器端渲染和客户端渲染结果不一致,客户端再渲染导致的错误,主要结果就是耗费性能,当然也可以关闭提示错误 具体解决措施可以看看官方文档参考 相关的…

Vagrant + docker搭建Jenkins 部署环境

有人问,为什么要用Jenkins?我说下我以前开发的痛点,在一些中小型企业,每次开发一个项目完成后,需要打包部署,可能没有专门的运维人员,只能开发人员去把项目打成一个war包,可能这个项…

2024年5月10日有感复盘

2024年5月10日有感复盘 时间 今天是一个很美好的一天,原因是很平凡,读书很平凡,玩游戏很平凡,然后生活很平凡,未来可期,听歌很舒服,很喜欢一个人呆在图书馆的感觉,很喜欢发呆&…

VLM与基础分割模型的联合使用

最近做的项目里有涉及大模型,里面有一部分的功能是: 将图片输入VLM(视觉语言模型,我使用的是llava),询问图中最显著的物体,将其给出的答案作为基础分割模型(我使用的是Grounded-SAM)的text prom…

SEMI启动SiC专有技术项目

公司郑重声明,其正致力于筛选那些能够稳定输出、且可重复使用的关键参数性能。SEMI,这家SiC领域的佼佼者,已经启动了一项独具匠心的专有技术(KGD)筛选程序。该程序旨在为客户提供高品质的、经过严格电气分类与光学检验…

重写muduo之Buffer

1、 Buffer.h Buffer封装 是一个缓冲区 prependable bytesreadable byteswritable bytes8字节长度(解决粘包问题)读数据写数据 根据下标进行读或者写 3个成员变量:数组,数据可读的下标,数据可写的下标 #pragma once#…

打印图案(金字塔)头歌作业

题目: 任务描述 本关任务:编写一个程序,输出堆叠式的金字塔图案。 输入n个字符,按以下原则输出:【参考样例】 1)第1个字符为一层金字塔图案,第2个字符为两层金字塔图案,第3个字符为三层金字塔图案&#x…

C语言——文件缓冲区

一、用户缓冲区和系统缓冲区 缓冲区的概念确实可以分为多个层次,其中最常见的两个层次是用户缓冲区和系统缓冲区。 这里的用户缓冲区和系统缓冲区都包括输入输出缓冲区。 1、用户缓冲区(User-space Buffer) 用户缓冲区是指由用户程序&…

使用 Spring Boot 配合策略模式增强系统接口扩展能力

使用 Spring Boot 配合策略模式增强系统接口扩展能力 在软件开发中,系统的可扩展性是一个至关重要的方面。而策略模式是一种常见的设计模式,它可以帮助我们实现灵活的算法选择和系统功能扩展。结合 Spring Boot 框架,我们可以更加方便地利用策…