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

news2024/9/21 10:55:59

一、题目

 

函数原型:

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;
    }
};

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

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

相关文章

3D造型渲染软件DAZ Studio mac中文版介绍

DAZ Studio mac是一款3D造型和渲染软件&#xff0c;由 Daz 3D 公司开发。它允许用户创建、编辑、动画化并渲染精美的数字图像与动画。DAZ Studio 还提供了一个虚拟的3D艺术家工作室环境&#xff0c;让用户可以轻松地设置场景、布置角色和应用材质。 用户可以通过 DAZ Studio 中…

麒麟KYLINOS中使用Ghost镜像文件还原系统

原文链接&#xff1a;麒麟KYLINOS中使用Ghost镜像文件还原系统 hello&#xff0c;大家好啊&#xff0c;今天给大家带来麒麟KYLINOS备份还原的第三篇文章&#xff0c;使用Ghost镜像文件还原系统&#xff0c;将之前做好的Ghost镜像文件拷贝到u盘里&#xff0c;然后在另一台终端上…

如何在群晖虚拟机快速部署线上web网站并实现公网访问

文章目录 前言1. 安装网页运行环境1.1 安装php1.2 安装webstation 2. 下载网页源码文件2.1 访问网站地址并下载压缩包2.2 解压并上传至群辉NAS 3. 配置webstation3.1 配置网页服务3.2 配置网络门户 4. 局域网访问静态网页配置成功5. 使用cpolar发布静态网页&#xff0c;实现公网…

2023年【汽车驾驶员(高级)】证考试及汽车驾驶员(高级)实操考试视频

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 汽车驾驶员&#xff08;高级&#xff09;证考试考前必练&#xff01;安全生产模拟考试一点通每个月更新汽车驾驶员&#xff08;高级&#xff09;实操考试视频题目及答案&#xff01;多做几遍&#xff0c;其实通过汽车…

ASAM OpenDRIVE V1.7协议超详解(一)

文章目录 前言一、仿真场景的构成二、openDRIVE框架三、g_additionalData四、openDRIVE-header五、openDRIVE-road1、Road总拓扑结构2、Road-link介绍1&#xff09;link的拓扑结构2&#xff09;link链接示例3&#xff09;link前继后继4&#xff09;道路link规则 3、road-type介…

从0到0.01入门React | 005.精选 React 面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

理事长走进统信软件,深度探讨社区发展规划 | 理事长走进系列

10 月 19 日&#xff0c;龙蜥社区“理事长走进理事单位系列交流会”活动第二期开展&#xff0c;本期走进龙蜥社区副理事长单位——统信软件&#xff0c;会议共出席 17 人。会上回顾了统信软件过去在龙蜥社区的贡献和投入&#xff0c;并共同对未来的合作计划和诉求进行了深度讨论…

cpcd 使用

cpcd 是支持多协议融合的一种解决方案&#xff0c;应用场景是一个无线模块支持大于一种协议栈&#xff0c;通过cpcd 可以分发不同协议&#xff0c;使用说明主要查看readme.md 文件说明 编译 使用cpcd 4.3.2 提示需要安装mbedtls 编译成功了 运行 关闭加密&#xff0c;通信…

普通线性回归和评估指标代码实战

我们用加州房价预测来讲述普通线性回归的算法实战和预测指标。在这里省去数据预处理和特征工程的步骤。首先导入相应的模块&#xff1a; from sklearn.linear_model import LinearRegression as LR from sklearn.model_selection import train_test_split from sklearn.model_…

基于若依的ruoyi-nbcio流程管理系统增加读取节点扩展属性的方法

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 我们的在流程设计器里会根据需要再不同的节点增加扩展属性&#xff0c;如何动态读取这些扩展属性&#xff…

机器人仿真GAZEBO开源代码分享

1、https://github.com/PRBonn/agribot 2、https://github.com/ros-mobile-robots/diffbot

OpenHarmony worker详解

一&#xff0c;定义 worker是与主线程并行的独立线程。创建Worker的线程被称为宿主线程&#xff0c;Worker工作的线程被称为Worker线程。创建Worker时传入的脚本文件在Worker线程中执行&#xff0c;通常在Worker线程中处理耗时的操作&#xff0c;需要注意的是&#xff0c;Work…

【开源项目】snakeflow流程引擎研究

项目地址 https://gitee.com/yuqs/snakerflow https://toscode.mulanos.cn/zc-libre/snakerflow-spring-boot-stater &#xff08;推荐&#xff09; https://github.com/snakerflow-starter/snakerflow-spring-boot-starter 常用API 部署流程 processId engine.process().de…

仓库管理系统(WMS)升级解决方案—条码引入

在企业的整个供应链中&#xff0c;仓储起着至关重要的作用&#xff0c;如果不能保证正确的进货和库存控制及发货&#xff0c;将会导致管理费用的增加&#xff0c;服务质量难以得到保证&#xff0c;从而影响企业的竞争力。 传统简单、静态的仓库管理通常以结果为导向&#xff0…

windows aseprite编译指南(白嫖)

aseprite是画像素图的专业软件&#xff0c;steam上有售卖&#xff0c;不过官方也在github开源了&#xff0c;需要自己编译。 1. 首先获取源码 直接在github上clone源码到本地指定目录 git.bash中执行&#xff08;需要腾一个用来安放源码的路径&#xff09;&#xff1a; git…

react脚手架create-react-app创建react项目

1.全局安装 create-react-app winR/桌面目录下cmd进入终端页面 npm i -g create-react-app2.create-react app 初始化项目 create-react-app 项目名称项目初始化完成 运行项目 目录下cmd控制台输入 npm start然后打开本地服务运行项目查看

RE切入点:选择SLI,设定SLO

还是先来复习下上节课讲的“系统可用性”的两种计算方式&#xff0c;一种是从故障角度出发&#xff0c;以时长维度对系统进行稳定性评估&#xff1b;另一种是从成功请求占比角度出发&#xff0c;以请求维度对系统进行稳定性评估。同时&#xff0c;我们还讲到&#xff0c;在 SRE…

飞天使-django创建一个初始项目过程

创建django项目 运行项目 运行命令 pyhont manage.py runserver 然后访问 http://127.0.0.1:8000/&#xff0c; 则可以打开本地新建的项目 虚拟环境的部署-mac 在一台计算机上可以通过虚拟环境实现多个版本Django的开发环境 安装虚拟环境工具&#xff1a;如果你的系统中没有安…

线性代数(三) | 向量组的秩 线性相关无关 几何直观理解 题解应用

文章目录 1 维数&#xff1f;向量组的秩究竟是什么&#xff1f;1.1 线是一维的1.2 面是二维的1.3 体是三维的 2 线性相关、线性无关、线性表示究竟是什么&#xff1f;2.1 基于以上几何直观的解题角度2.2 基于方程组的解题角度 1 维数&#xff1f;向量组的秩究竟是什么&#xff…

考研的风吹到你了吗?中国人民大学与加拿大女王大学金融硕士为你提供另一读研途径

24考研的风吹到你了吗&#xff1f;随着社会的不断发展&#xff0c;越来越多的人选择继续深造&#xff0c;通过考研来提升自己的学历和能力。然而&#xff0c;考研并不是一件容易的事情&#xff0c;需要付出大量的时间和精力。面对国内竞争激烈的考研环境&#xff0c;许多人会选…