牛客网:OR36 链表的回文结构

一、题目

 

函数原型:

bool chkPalindrome(ListNode* A)

二、思路

判断一个单链表是否为回文结构,由于单链表不能倒序遍历,所以需要找到单链表的后半段,并将其逆置,再与前半段链表进行比较。

如何找到单链表的后半段呢?

如果链表结点数为偶数个,只要找到单链表的第二个中间结点即可。

如果链表节点数为奇数个,只要找到单链表中间结点的下一个结点即可。

 本题相关题目:

206. 反转链表 - 力扣(LeetCode)

876. 链表的中间结点 - 力扣(LeetCode)

相关题解:

leetcode:206. 反转链表-CSDN博客

leetcode:876. 链表的中间结点-CSDN博客

 三、代码

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};*/
#include <cstddef>
ListNode* reserve(ListNode *pphead)//逆置链表函数
{  
    if(pphead==NULL||pphead->next==NULL)
        return pphead;
    else
    {
        ListNode *prev =NULL;
        ListNode *cur=pphead;
        ListNode *next=pphead->next;
 
        while(cur)
        {
            cur->next=prev;
            prev=cur;
            cur=next;
            if(next)
                next=next->next;
            else
                next=NULL;
        }
        return prev;
    }   
}
 
class PalindromeList {
public:
    bool chkPalindrome(ListNode* A) {
        // write code here
        ListNode *fast=A;
        ListNode *slow=A;
        while(fast)//找链表的第二个中间结点或链表中间结点的下一个结点
        {
            slow=slow->next;
            if(fast->next)
                fast=fast->next->next;
            else
                fast=NULL;
        }
        //逆置链表
        // ListNode *B=NULL;
        // ListNode *tailB=NULL;
        // while(slow)
        // {
        //     if(tailB==NULL)
        //     {
        //         B=tailB=slow;
        //     }
        //     else
        //     {
        //         tailB->next=slow;
        //         tailB=slow;
        //     }
        //     slow=slow->next;          
        // }
        // tailB->next=NULL;
 
        ListNode *B=reserve(slow);//逆置链表
 
        ListNode *curA=A;
        ListNode *curB=B;
        while(curA&&curB)//比较前半段和后半段链表
        {
            if(curA->val==curB->val)
            {
                curA=curA->next;
                curB=curB->next;
            }
            else
                return false; 
        }
        return true;
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

对比国内主流开源 SQL 审核平台 Yearning vs Archery

Yearning, Archery 和 Bytebase 是目前国内最主流的三个开源 SQL 审核平台。其中 Yearning 和 Archery 是社区性质的项目&#xff0c;而 Bytebase 则是商业化产品。通常调研 Bytebase 的用户也会同时比较 Yearning 和 Archery。 下面我们就来展开对比一下 Yearning 和 Archery…

服务器数据恢复—磁盘出现坏道掉线导致raid5阵列崩溃的数据恢复案例

服务器数据恢复环境&#xff1a; 某品牌服务器中有一组16块SAS接口硬盘组建的raid5磁盘阵列。 服务器故障&检测&#xff1a; 服务器raid5阵列中有2块硬盘掉线&#xff0c;上层服务器应用崩溃&#xff0c;导致服务器数据丢失。丢失的数据主要是4个1.5TB大小的卷中的数据&am…

域名反查Api接口——让您轻松查询域名相关信息

在互联网发展的今天&#xff0c;域名作为网站的唯一标识符&#xff0c;已经成为了企业和个人网络营销中不可或缺的一部分。为了方便用户查询所需的域名信息&#xff0c;API接口应运而生。本文将介绍如何使用挖数据平台《域名反查Api接口——让您轻松查询域名相关信息》进行域名…

python中的切片操作

切片操作&#xff1a; 1.切片操作是访问元素序列的另一种方法&#xff0c;它可以访问一定范围内的元素。通过切片操作形成一个新序列 语法结构&#xff1a; 序列【start&#xff1a;end&#xff1a;step】 参数说明&#xff1a; start&#xff1a;表示切片的开始位置&#x…

YOLOv5算法进阶改进(2)— 引入可变形卷积模块 | 涨点杀器

前言:Hello大家好,我是小哥谈。可变形卷积模块是一种改进的卷积操作,它可以更好地适应物体的形状和尺寸,提高模型的鲁棒性。可变形卷积模块的实现方式是在标准卷积操作中增加一个偏移量offset,使卷积核能够在训练过程中扩展到更大的范围,从而实现对尺度、长宽比和旋转等各…

北大联合智源提出训练框架LLaMA-Rider

大语言模型因其强大而通用的语言生成、理解能力&#xff0c;展现出了成为通用智能体的潜力。与此同时&#xff0c;在开放式的环境中探索、学习则是通用智能体的重要能力之一。因此&#xff0c;大语言模型如何适配开放世界是一个重要的研究问题。 北京大学和北京智源人工智能研究…

22.斐波那契数列数列前20项.

#include<stdio.h>int main(){int i,sum1; int a[100];a[0]0;a[1]1;for(i2;i<20;i){a[i]a[i-1]a[i-2]; sumsuma[i];}printf("斐波那契数列的前20项和为&#xff1a;%d",sum);return 0;}

Redis05-集群方案

目录 Redis集群方案 主从复制 主从复制的基本原理 主从复制的工作流程 乐观复制 主从复制的优势 哨兵机制 哨兵的关键作用 服务状态监控 哨兵选举Master规则 分片集群 分片集群中的数据读写 数据写入 数据读取 一致性哈希和客户端分片 Redis集群方案 微服务时代…

Python编程爬虫代码

这是一个基本的爬虫程序的示例&#xff0c;按照你的需求进行了修改&#xff1a; typescript import * as request from request; import * as cheerio from cheerio; const proxyHost ; const proxyPort ; // 创建一个request实例&#xff0c;使用 const requestWithProxy…

基于单片机智能浇花系统仿真设计

**单片机设计介绍&#xff0c; 基于单片机智能浇花系统仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的智能浇花系统可以实现自动化浇水、测土湿度和温度等功能&#xff0c;以下是一个基本的仿真设计步骤&am…

详细推导MOSFET的跨导、小信号模型、输出阻抗、本征增益

目录 前言 什么是跨导 什么是小信号模型 什么是输入阻抗和输出阻抗 什么是MOS管的输出阻抗 什么是MOS管的本征增益 共源极放大电路的输入和输出阻抗 一些其它MOS拓扑电路的增益 负载为恒流源 负载为二极管 前言 相信很多人在学习集成电路领域的时候 都对MOS管的…

【机器学习基础】机器学习入门(1)

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a;机器学习 欢迎订阅&#xff01;后面的内容会越来越有意思~ &#x1f4a1;专栏介绍&#xff1a; 本专栏的第一篇文章&#xff0c;当然要介绍一下了~来说一下这个专栏的开…

asp.net core mvc之 RAZOR共享指令和标签助手 TagHelpers

一、RAZOR共享指令 RAZOR共享指令&#xff1a;在视图中导入命名空间&#xff0c;执行依赖注入。 RAZOR共享指令是写在 Views目录下的 _ViewImports.cshtml 文件 支持指令如下&#xff1a; addTagHelper 增加标签助手 removeTagHelper 移除标签助手 tagHelperPrefix 标签助手…

javaSE学习笔记(八)-多线程

目录 九、多线程 1.概述 线程 多线程并行和并发的区别 Java程序运行原理 多线程为什么快 如何设置线程数比较合理 CPU密集型程序 I/O密集型程序 注意 线程的五种状态 新建状态&#xff08;new&#xff09; 就绪&#xff08;runnable&#xff09; 运行状态&#x…

ubutun上编译出现undefined reference to symbol ‘dladdr@@GLIBC_2.2.5‘的错误

作者&#xff1a;朱金灿 来源&#xff1a;clever101的专栏 为什么大多数人学不会人工智能编程&#xff1f;>>> ubutun上编译一段C程序&#xff0c;出现错误&#xff1a; /usr/bin/ld: /tmp/ccghh3FJ.o: undefined reference to symbol ‘dladdrGLIBC_2.2.5’ //lib/…

记录一个错误

通过Resource注解&#xff0c;将IStateHandler接口的实现类 StateHandlerImpl注入进来 Resource private IStateHandler stateHandler;Resource注解默认按照名称进行装配&#xff0c;这里抛出异常是因为IStateHandler和StateHandlerImpl都被 Spring 容器管理&#xff0c;在进行…

css渐变背景,linear-gradient()线性渐变和radial-gradient()径向渐变

嗨&#xff0c;大家好&#xff0c;我是爱搞知识的咸虾米。 许多APP、小程序、网站等都喜欢采用渐变色背景&#xff0c;这样做不但可以增加设计感&#xff0c;而且能提升品牌辨识度。 所以&#xff0c;今天使用css的线性渐变和径向渐变&#xff0c;给大家将这几种不同类型的渐变…

【mybatisPlus简化开发过程】

mybatisPlus简化开发过程 1.入门案例1.1 SpringBoot整合Mybatis开发过程(复习) 2.Mp简介3. 增删改查4. 分页插件5. 多条件查询(lambda版本)6 条件查询的null值处理7. Lambda查询投影8.条件查询8.1 范围查询(>、、between)8.2 模糊查询 (like)8.3 空判定(null)8.4 包含性判定…

重复性工作自动化解决方案——影刀

以前&#xff0c;影刀是一个邂逅的初见小工具&#xff0c;新奇在里头&#xff0c;踌躇在外头&#xff1b; 现在&#xff0c;影刀是一个稳定的职场贾维斯&#xff0c;高效在里头&#xff0c;悠闲在外头&#xff1b; 以后&#xff0c;影刀是一个潜力的知己老司机&#xff0c;有序…

【网络奇缘】我和英特网再续前缘

&#x1f308;个人主页: Aileen_0v0&#x1f525;系列专栏: 一见倾心,再见倾城 --- 计算机网络~&#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 计算机网络的概念 计算机网络的功能 ⭐1.数据通信 ⭐2.资源共享 ⭐3.分布式处理 ⭐4.提高可靠性 ⭐…