【牛客网】链表的回文结构

news2024/9/20 20:32:44

思路1:找到中间节点,从中间节点向后反转链表

寻找链表的中间节点和反转链表的程序已经讲解过

寻找链表的中间节点:CSDN

反转链表:CSDN

然后从头节点和中间节点依次向后比较节点的值

📖Note:

后半段链表反转后,需要更新mid的值

需要分奇数个节点的链表和偶数个节点的链表比较

1️⃣奇数个节点的链表

📖Note:

对于奇数个节点的链表,比较结束的条件是mid->next == NULL

2️⃣偶数个节点的链表

📖Note:

对于偶数个节点的链表,比较结束的条件是mid == NULL

参考代码如下:

bool chkPalindrome(ListNode* A) {
    // write code here
    //寻找中间节点 
    struct ListNode* slow = A;
    struct ListNode* fast = A;
    struct ListNode* head = A;

    while (fast && fast->next)
    {
        slow = slow->next;
        fast = fast->next->next;
    }
    struct ListNode* mid = slow;

    //反转后半段
    //struct ListNode* midhead = mid;
    struct ListNode* n1 = NULL;
    struct ListNode* n2 = mid;
    struct ListNode* n3 = NULL;

    while (n2)
    {
        n3 = n2->next;
        n2->next = n1;

        n1 = n2;
        n2 = n3;
    }
    //反转之后,n2指向空,n1指向新的头
    mid = n1;

    //比较
    while (mid && mid->next)
    {
        if (head->val == mid->val)
        {
            head = head->next;
            mid = mid->next;
        }
        else
        {
            return false;
        }
    }

    return true;

}

思路二:反转整个链表,从头结点开始与原链表依次比较

由上图:回文结构的链表反转后与原链表相同,非回文结构的链表反转后与原链表不同

参考代码如下:

bool chkPalindrome(ListNode* A) 
{
    //反转整个链表再比较
    struct ListNode* newhead = NULL;
    struct ListNode* n1 = NULL;
    struct ListNode* n2 = A;
    struct ListNode* n3 = NULL;

    while (n2)
    {
        n3 = n2->next;
        n2->next = n1;

        n1 = n2;
        n2 = n3;
    }
    newhead = n1;

    //比较
    struct ListNode* head = A;
    while (head)
    {
        if (head->val == newhead->val)
        {
            head = head->next;
            newhead = newhead->next;
        }
        else
        {
            return false;
        }
    }

    return true;

}

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

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

相关文章

每天100w次登陆请求, 8G 内存该如何设置JVM参数?

一、新系统上线如何规划容量? 1.套路总结 任何新的业务系统在上线以前都需要去估算服务器配置和JVM的内存参数,这个容量与资源规划并不仅仅是系统架构师的随意估算的,需要根据系统所在业务场景去估算,推断出来一个系统运行模型&…

事后多重比较方法

一、案例介绍 由单因素方差分析案例中,为研究郁金对低张性缺氧小鼠存活时间的影响,将36只小鼠随机生成A、B以及 C 三组,每组12个,雌雄各半,分别以10g/kg、20g/kg、40g/kg三种不同剂量的郁金灌胃,各组小鼠均…

vue elementui table去掉滚动条与实现表格自动滚动且无滚动条

当table内容列过多时,可通过height属性设置table高度以固定table高度、固定表头,使table内容可以滚动。 现在需求是右侧滚动条不好看,需要去除滚动条,并隐藏滚动条所占列的位置。让他可以滚动但是不出现滚动条,不然即时隐藏了滚动…

运动蓝牙耳机有什么推荐的?这几款非常值得入手!

运动不仅能够锻炼身体,还能调节情绪释放压力,每到周末均会去徒步或骑行,路途上少不了音乐的相伴,运动期间会佩戴耳机聆听音乐,边聆听喜欢的音乐或有声读物,边享受当下的美景。骨传导耳机可以说在多种耳机当…

每天一个电商API分享:获得淘宝商品快递费用 API

在电商行业中,快递费用是一项不容忽视的重要开支。随着电商行业的不断发展壮大,越来越多的消费者选择在线购物,这就增加了电商企业的订单量和物流压力。在这个过程中,快递费用起到了承载和运输商品的重要作用。 首先,…

easyUI框架学习

文章目录 一、前言二、引入使用easyUI 三、用法3.1 Dialog(对话框窗口)3.1.1 示例13.1.2 示例2 3.2 Layout(布局)3.2.1 示例1——通过标签创建布局3.2.2 示例2—— 创建嵌套布局 3.3 DateBox(日期输入框)3.…

【Spring框架】Bean作用域和生命周期

目录 Bean作用域设置Bean作用域生命周期⽣命周期演示 Bean作用域 Bean作用域指的是Bean在Spring容器中的某种行为(单例、原型…)。 Bean的6种作用域 singleton:单例作⽤域prototype:原型作⽤域(多例作⽤域)request:请…

Jenkins 配置maven和jdk

前提:服务器已经安装maven和jdk 一、在Jenkins中添加全局变量 系统管理–>系统配置–>全局属性–>环境变量 添加三个全局变量 JAVA_HOME、MAVEN_HOME、PATH 二、配置maven 系统管理–>全局工具配置–>maven–>新增 新增配置 三、配置JDK 在系统管…

node.js旅游景点分享网站【纯干货分享,免费领取源码03796】

node.js旅游景点分享网站 摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。旅游景点分享网站设计,主要的模块包括查看后台首页、轮播图(轮播图管理)、网站公告…

QSlider 样式 Qt15.15.2 圆形滑块

在看文档的时候测试了一下demo,然后发现了一个有意思的东西,自定义滑块为带边框的圆形。 在设置的时候边框总是和预期的有点误差,后来发现了这样一个计算方式可以画一个比较标准的圆。(ABCDEF在下方代码块内) 滑块的…

自定义信号槽机制

自定义信号槽机制 自定义信号自定义槽自定义信号和槽函数的使用解决办法 如果想要在QT类中自定义信号槽, 需要满足一些条件, 并且有些事项也需要注意: 要编写新的类并且让其继承Qt的某些标准类这个新的子类必须从QObject类或者是QObject子类进行派生在定义类的头文件中加入 Q_…

linux上适用的反汇编调试软件(对标od)

ubuntu下类似于od软件 经过搜索,在Ubuntu上选用edb-debugger进行动态调试, 下载链接: https://github.com/eteran/edb-debugger 但是依赖反汇编引擎: https://github.com/capstone-engine/capstone 安装 先安装capstone 先下载release的版本&#xf…

有类型地址

有类型地址 子网号:基于网络号上划分。 A,B,C,D,E 类地址开头不同,是为了让网络不重叠。 A 类型 0 开头 网络号:8 位(1 个字节)。 主机号:24 位&#xff0…

windows环境下adb 下载和配置,连接手机。

ADB下载地址: https://adbdownload.com/ 选择下载windows系统的。 下载后解压,查看adb.exe所在的目录,如下 这里将路径复制下来:D:\ADB 配置到系统环境变量中。 然后再打开cmd,输入adb version查看版本。 出现…

Centos7.9 离线部署ChatGLM-6B

ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。ChatG…

【stable diffusion】保姆级入门课程06-Stable diffusion(SD)图生图-上传蒙版及批量处理的用法

目录 0.本章素材 1.什么是上传蒙版 1.1.注意点 1.2.提示词部份 2.批量处理 3.涂鸦、局部重绘、涂鸦蒙版、上传蒙版 4.结语 0.本章素材 案例图链接:https://pan.quark.cn/s/3a64e682e311 案例图蒙版链接:https://pan.quark.cn/s/075f889af9c0 1.什…

了解Unity编辑器 之组件篇Effects(十一)

一、Halo:是一个可用于游戏对象的特效组件,它可以在对象周围添加一个光晕效果 Color属性: 用于设置Halo的颜色。你可以通过选择颜色面板中的颜色来指定光晕的外观。选择适当的颜色可以使光晕与游戏场景中的其他元素相匹配或突出显示。 Size属性: 用于设…

Kubernetes 之CNI 网络插件大对比

介绍 网络架构是Kubernetes中较为复杂、让很多用户头疼的方面之一。Kubernetes网络模型本身对某些特定的网络功能有一定要求,但在实现方面也具有一定的灵活性。因此,业界已有不少不同的网络方案,来满足特定的环境和要求。 CNI意为容器网络接…

华为数通HCIP-MPLS

传统ip转发 路由器根据流量的dip查找路由表进行转发; 缺陷:查找路由表需要消耗一定CPU开销;(可以通过FIB表解决) 安全性低,中间转发设备可以看到网络层ip信息; FIB(转发信息库) 定…

Jmeter性能测试之正则表达式提取器

目录 前言 1. Jmeter正则表达式提取器 2. 入门实例 3. 进阶实例 前言 Jmeter正则表达式提取器属于Jmeter后置处理器(post processors)的一种,用于将取样器请求到的结果以正则表达式的方式读取出来。 1. Jmeter正则表达式提取器 1. 作用…