【LeetCode】数据结构题解(6)[回文链表]

news2024/9/21 12:33:53

回文链表

  • 1.题目来源
  • 2.题目描述
  • 3.解题思路
  • 4.代码展示

所属专栏:玩转数据结构题型
博主首页:初阳785
代码托管:chuyang785
感谢大家的支持,您的点赞和关注是对我最大的支持!!!
博主也会更加的努力,创作出更优质的博文!!
关注我,关注我,关注我,重要的事情说三遍!!!!!!!!

1.题目来源

回文链表

2.题目描述

给定一个链表的 头节点 head ,请判断其是否为回文链表。
如果一个链表是回文,那么链表节点序列从前往后看和从后往前看是相同的。
在这里插入图片描述

3.解题思路

这个题目需要结合之前的几个解题思路。
1.快慢指针
2.查找中间节点
3.反转链表

既然我们要判断是否是回文数,如果他是个数组的话我们就会创建两个变量,一个从头出发,一个从尾出发,一次迭代判断是否相同,这样的话就很好的解决了问题。
但是这里是链表,链表的特点就是它是单向的,你只能找到后一个,但是你找不到前面一个。
那我们就想一下有没有方法可以实现类似于数组的方法呢?

我们先观察一下回文的特点:
在这里插入图片描述
我们会发现如果是偶数的话左边一半会等于右边一半反转之后的样子。
既然我们不能从尾向头遍历,那我们不妨把后半部分反战过来,让它的尾做头,这样子我们就可以遍历并判断力。

于是我们就得先找到中间节点,并从中间节点开始反转一中间节点尾起点的链表。
在这里插入图片描述
反转的时候我们得创建一个新的节点newNode,然后头插反转链表:
在这里插入图片描述
但是我们不要忘记了虽然我们反转链表了,但是上面的3的next还是指向下面3的地址的:
在这里插入图片描述
将他变成这个样子之后,我们就可以遍历我们的head->val是否等于newNode->val来判断是否是回文链表了。
只要head或者newNode其中一个遍历到了NULL就停止。

4.代码展示

bool isPalindrome(struct ListNode* head)
{
    //1.找中间节点
    //快慢指针
    struct ListNode*fast=head,*low=head;
    while(fast && fast->next)//快慢指针退出条件(当链表是偶数后者是奇数的时候)
    {
        low=low->next;
        fast=fast->next->next;
    }
    struct ListNode* midNode=low;
    //2.反转中间节点以后的链表
    struct ListNode* newNode=NULL,*midNext=NULL;
    while(midNode)
    {
        midNext=midNode->next;
        midNode->next=newNode;
        newNode=midNode;
        midNode=midNext;
    }
    //3.迭代判断是否相同
    while(head && newNode)//这里同样的链表可能是偶数也可能是奇数,不知道谁先到达NULL
    {
        if(head->val != newNode->val)
            return false;
        head=head->next;
        newNode=newNode->next;
    }
    return true;
}

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

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

相关文章

C++入门2(缺省参数 inline函数 函数重载 函数模板)

C入门2 缺省参数结合优先级 inline函数vs中的测试实例inline函数要点内联函数与宏定义区别: 函数重载定义名字粉碎技术C编译时函数名修饰约定规则 函数模板 缺省参数 函数定义时,缺省值赋值是从右向左依次赋值 调用函数时,从左向右依次给实参值&#xf…

【HTTP/1.1、HTTP/2、HTTP/3】

文章目录 HTTP/1.1 如何优化?避免发送HTTP请求减少HTTP次数减少 HTTP 响应的数据大小 HTTP/2HTTP/1.1性能问题HTTP/2的性能优化头部压缩二进制帧(重点)并发传输服务器主动推送资源 HTTP/2问题总结 HTTP/3HTTP/2的性能问题队头阻塞TCP 与 TLS …

跟着我学 AI丨打败李世石和柯洁的 AlphaGo

强化学习是一种人工智能的方法,它模仿了人类学习的方式。通过试错来学习,实现从经验中提取知识的目的。强化学习的核心思想是基于奖励的学习,它的目标是通过在环境中采取行动,并根据行动结果获得奖励,从而学会最优的行…

CNNs: AlexNet补充

CNNs: AlexNet的补充 导言对AlexNet模型进行调整模型不同层的表征其他探索总结 导言 上上篇和上一篇我们详细地讲述了AlexNet的网络结构和不同超参数对同一数据集的不同实验现象。 本节,我们就AlexNet的一些其他相关问题进行解剖,如修改AlexNet参数量调…

JVM内存模型基础

大家好,我是易安! 我们知道运行一个Java应用程序,我们必须要先安装JDK或者JRE包。这是因为Java应用在编译后会变成字节码,然后通过字节码运行在JVM中,而JVM是JRE的核心组成部分。 JVM不仅承担了Java字节码的分析&#…

JavaWeb ( 五 ) Servlet

2.3.Servlet Servlet(Server Applet)是Java Servlet的简称。 是在服务器端执行的 , 用于响应客户端请求的Java类。HttpServlet 是使用java语言对http通信的实现。 2.3.1.Servlet声明 在 web.xml 中声明Servlet的请求url及对应的类路径 , 3.0版本后可以…

APSIM模型

随着数字农业和智慧农业的发展,基于过程的农业生产系统模型在模拟作物对气候变化的响应与适应、农田管理优化、作物品种和株型筛选、农田固碳和温室气体排放等领域扮演着越来越重要的作用。APSIM (Agricultural Production Systems sIMulator)模型是世界知名的作物生…

趣谈西工大电子实习物联网智慧交通系统

学习简介: 物联网智慧交通系统是电子实习中相当有趣的一个环节,可以在一定程度上弥补没有被分配到智能小车的遗憾。在这个模块当中,你将在老师的带领下以完成两个小任务为驱动,让自身能力在八个学时当中充分锻炼。 下面这两张图…

微信小程序商城搭建--后端+前端+小程序端

介绍: 前端技术:React、AntdesignPro、umi、JavaScript、ES6、TypeScript、 小程序 后端技术:Springboot、Mybatis、Spring、Mysql 软件架构: 后端采用Springboot搭配前端React进行开发,完成用户管理、轮播图管理、…

[MySQL / Mariadb] 数据库学习-Linux中安装MySQL,YUM方式

[Mariadb] 数据库学习笔记 在Linux中安装MySQL,YUM方式mariadb 介绍安装启服务初始配置修改密码 密码策略,默认策略是1show variables; 查所有变量show variables like "%变量%"; 查特定的变量参数临时:永久: MySQL基本操作连接SQL…

使用@PropertySource加载配置文件

1.PropertySource和PropertySources注解 1.1.PropertySource注解概述 PropertySource注解是Spring 3.1开始引入的配置类注解。通过**PropertySource注解可以将properties配置文件中的key/value存储到Spring的Environment中,Environment接口提供了方法去读取配置文…

ModStartCMS v6.3.0 电脑端在线充值,前端库升级

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用,支持后台一键快速安装,让开发者能快的实现业务功能开发。 系统完全开源,基于 Apache 2.0 开源协议,免费且不限制商业使用。 功能特性 丰富的模块市…

AMA 回顾|关于访问水晶铸造的一些调整建议

这是社区系列 AMA 的第一期。下周,我们将举行一场新的 AMA,讨论重新启动游戏的相关内容。 感谢大家在百忙之中参与这次活动。相信社区的每一位成员都在蓝精灵协会这个项目中投资了一些东西,比如时间、精力或者是金钱。蓝精灵协会团队在过去的…

docker打包流程

docker打包流程 1、使用docker前置准备: 电脑下载docker桌面版,以及开启虚拟机步骤:https://blog.csdn.net/qq_34905631/article/details/126573826下载docker桌面版 :https://docs.docker.com/desktop/install/windows-install…

swagger-codegen智能生成Python-unittest测试用例

简介:Swagger Codegen是一个开源项目,用于从OpenAPI规范(以前称为Swagger规范)文件生成服务器存根、客户端库和API文档。它支持多种编程语言和框架,包括Python、Java、Ruby、Go等。 历史攻略: sanic&…

快速打造高效代驾服务:代驾系统源码分享

要想快速打造高效代驾服务,选择一款优秀的代驾系统是非常重要的。本文介绍的代驾系统源码是基于PHP语言和MySQL数据库开发的,可以轻松地在Linux或Windows系统中部署。 首先,需要确保服务器环境符合系统的要求,包括PHP版本、MySQL版…

三范式(详解+例子)

第一范式(1NF):每一列都是不可分割的原子数据项(什么意思,每一项都不可分割,像下面的表格就能分割,所以它连第一范式都算不上) 分割后的样子 (它就是第一范式了&#xff…

crm项目bug小结

项目主要内容分析: 第一天完成了系统用户登录、退出、密码修改、全局异常、非法请求与记住我等系统基本功能。 项目的目录结构如图: 1 登录思路: ** * 1.参数校验 * 用户名 非空 * 密码 非空 * 2.根据用户名 查询用户记录 * 3.校验用户存…

搞懂 API ,API 中 URI 设计规范分享

API(Application Programming Interface)是现代软件开发中的一项关键技术,它为不同应用程序间提供了数据和功能交互的标准化方式。而 URI(Uniform Resource Identifier)作为 API 中的重要部分,其规范和良好…

BigCode开放性能超越Copilot的代码生成模型Starcoder

BigCode释出高效能程式码生成模型StarCoderBase,与为Python调校的StarCoder,效能超越GitHub Copilot初期版本所用的OpenAI code-cushman-001模型: BigCode昨晚发布了基于源代码和自然语言文本训练的编程语言生成模型StarCoder。其训练数据包…