链表练习 Leetcode234.回文链表

 题目传送门:Leetcode234

给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。

示例 1:

输入:head = [1,2,2,1]
输出:true

示例 2:

输入:head = [1,2]
输出:false

提示:

  • 链表中节点数目在范围[1, 105] 内
  • 0 <= Node.val <= 9

进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?

试题解析

提供两种方法

第一种方法:数组法

  • 将链表所有节点对应的value值从左到右存入数组中
  • 在数组内进行首尾元素匹配,直至数组中间位置

第二种方法:链表法

  • 首先找到链表中间节点
  • 将中间节点后的链表翻转,得到新链表
  • 将初始链表和新链表的元素进行匹配
数组法代码
class Solution {//双指针方法public:bool isPalindrome(ListNode* head) {if (head->next == nullptr) return true;vector<int> v;//将链表中所有值复制到数组中while (head != nullptr) {v.push_back(head->val);head = head->next;}//数组前后依次比较for (int i = 0, j = v.size() - 1; i < j; i++, j--) {if (v[i] != v[j]) {return false;}}return true;}
};
链表法代码
/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:bool isPalindrome(ListNode* head) {int num = 1;ListNode* pTempHead = getMiddleHead(head,&num);pTempHead = reverseList(pTempHead);//num用来计数,进行最后的匹配for(int i = 0; i < num; i ++){if(head->val != pTempHead->val) return false;head = head->next;pTempHead = pTempHead->next;}return true;}//得到中间节点ListNode* getMiddleHead(ListNode* head,int* num){ListNode* pSlow = head;ListNode* pFast = head;while(pFast->next != nullptr && pFast->next->next != nullptr){(*num)++;pSlow = pSlow->next;pFast = pFast->next->next;}return pSlow;}//反转中间节点后的链表ListNode* reverseList(ListNode* head){ListNode* pNewHead = nullptr;ListNode* pTake = head;ListNode* pBreak = head->next;while(pBreak != nullptr){pTake->next = pNewHead;pNewHead = pTake;pTake = pBreak;pBreak = pBreak->next;}pTake->next = pNewHead;return pTake;}
};

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

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

相关文章

语聚AI集成抖音丨集简云助力北京自由引擎无缝连接AI大模型,为企业提供即时专业支持

客户介绍 北京自由引擎有限公司作为一家快速发展的初创企业&#xff0c;公司以“创业斯基”为主要运营账号&#xff0c;致力于为B2B用户提供AI营销服务。北京自由引擎迅速崭露头角&#xff0c;成为业内瞩目的新星。核心业务包括提供课程和企业服务&#xff0c;尤其专注于使用A…

基于WebSocket双向通信技术实现-下单提醒和催单(后端)

学习复盘和总结项目亮点。 扩展&#xff1a;该功能能应用在&#xff0c;各种服务类项目中。&#xff08;例如&#xff1a;酒店、洗脚城等系ERP系中提醒类服务&#xff09; 4. 来单提醒 4.1 需求分析和设计 用户下单并且支付成功后&#xff0c;需要第一时间通知外卖商家。通…

Scipy 高级教程——高级插值和拟合

Python Scipy 高级教程&#xff1a;高级插值和拟合 Scipy 提供了强大的插值和拟合工具&#xff0c;用于处理数据之间的关系。本篇博客将深入介绍 Scipy 中的高级插值和拟合方法&#xff0c;并通过实例演示如何应用这些工具。 1. 高级插值方法 在插值中&#xff0c;我们通常会…

C++ 程序文档生成器(doxygen)使用说明

程序文档&#xff0c;是每个程序员必看文档&#xff0c;在日常业务开发中&#xff0c;难免会封装一些组件。没有很好的组件文档&#xff0c;再好的组件都是废物&#xff0c;。因此大型业务中&#xff0c;文档和思维导图&#xff0c;两个都是必备&#xff01; 一、注释风格 …

Google上架:2024年一月政策限制之用户生成的内容

为确保 Google Play 用户能够获得安全、值得信赖的使用体验&#xff0c;Google会定期更新开发者计划政策。今天就来讲解一下关于一月新政策《用户生成的内容》。 目录 公布日期&#xff1a;2023-10-25内容公告相关博客截止时间2024-1-31 公布日期&#xff1a;2023-10-25 内容…

(每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第6章 项目管理理论(三)

博主2023年11月通过了信息系统项目管理的考试&#xff0c;考试过程中发现考试的内容全部是教材中的内容&#xff0c;非常符合我学习的思路&#xff0c;因此博主想通过该平台把自己学习过程中的经验和教材博主认为重要的知识点分享给大家&#xff0c;希望更多的人能够通过考试&a…

【Java】源码文件开头添加注释

需求 应公司质量部要求&#xff0c;需要对代码做静态检查。质量部要求&#xff0c;源码文件必须在起始行起设置一些注释&#xff0c;然而项目已经开发了一年之久&#xff0c;且没有维护这个注释。 此时&#xff0c;面对好几千个源码文件&#xff0c;我们如何快速添加相应的注…

力扣124. 二叉树中的最大路径和

递归 思路&#xff1a; 定义节点最大贡献值&#xff1a; 空节点最大贡献值是 0&#xff1b;叶子结点最大贡献值是其本身&#xff1b;非叶子节点最大贡献值是其节点值与其子节点贡献值中最大的值的和&#xff1b;节点最大路径和为&#xff1a; 当前节点值 左子节点最大贡献和 …

12种常见的网络钓鱼

网络钓鱼是一种网络攻击&#xff0c;是指具有恶意动机的攻击者伪装欺骗人们并收集用户名或密码等敏感信息的一系列行为。由于网络钓鱼涉及心理操纵并依赖于人为失误(而不是硬件或软件漏洞)&#xff0c;因此被认定为是一种社会工程攻击。 1. 普通网络钓鱼&#xff08;群攻&…

HTML--基本结构构成

基本结构&#xff1a; 文档声明: <!DOCTYPE html> htm标签对 :<html> </html> head标签对&#xff1a; <head> </head> body标签对&#xff1a;<body> </body> 如下结构&#xff1a; <html> <head> <title>这是一…

Vue-22、总结Vue数据监测

1、功能 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Vue总结数据监测</title><script type"text/javascript" src"https://cdn.jsdelivr.net/npm/vue2/dist/vue.js"…

FFmpeg之SWScale

文章目录 一、概述二、函数调用结构图三、Libswscale处理数据流程四、重要结构体4.1、SwsContext4.2、SwsFilter 五、重要函数5.1、sws_getContext5.1.1、sws_alloc_context5.1.2、sws_init_context 5.2、sws_scale5.2.1、SwsContext中的swscale()5.2.2、check_image_pointers5…

电脑技巧:BitLocker是啥,有啥用,看完本文你就懂了

目录 一、 介绍 二、BitLocker用途 三、 工作原理 四、 配置和管理 五、安全性和适用性 六、总结 一、 介绍 BitLocker是由微软开发的全磁盘加密工具&#xff0c;它旨在保护计算机上的数据免受未经授权的访问或窃取。BitLocker通过对整个磁盘进行加密&#xff0c;可以在计…

1、机器学习模型的工作方式

第一步,如果你是机器学习新手。 本课程所需数据集夸克网盘下载链接:https://pan.quark.cn/s/9b4e9a1246b2 提取码:uDzP 文章目录 1、简介2、决策树优化3、继续1、简介 我们将从机器学习模型如何工作以及如何使用它们的概述开始。如果你以前做过统计建模或机器学习,这可能感…

DDOS攻击,一篇文章给你讲清!

1、互联网安全现状 随着网络世界的高速发展&#xff0c;各行业数字化转型也在如火如荼的进行。但由于TCP/IP网络底层的安全性缺陷&#xff0c;钓鱼网站、木马程序、DDoS攻击等层出不穷的恶意攻击和高危漏洞正随时入侵企业的网络&#xff0c;如何保障网络安全成为网络建设中的刚…

【征服redis6】Redis的内存淘汰详解

目录 1.redis的基本策略 2.Redis中的缓存淘汰策略 3.Redis内存不足的情况 4.几种淘汰策略的实现原理 5.项目实践与优化策略 5.1 配置案例 5.2 项目优化策略参考 数据库存储会将数据保存到磁盘中&#xff0c;而Redis的核心数据是在内存中的&#xff0c;而Redis本身主要用来…

每日 python 面试10题

Python中的列表和元组有什么区别&#xff1f; 列表是可变的&#xff08;Mutable&#xff09;&#xff0c;而元组是不可变的&#xff08;Immutable&#xff09;。列表使用方括号 [ ]&#xff0c;元组使用圆括号 ( )。列表支持各种操作&#xff0c;如增加、删除和修改元素&#x…

基于帧间差进行运动目标检测

相邻帧差检测&#xff1a;优点是运算快速&#xff0c;实时性高&#xff0c;缺点是无法应对光照的突变&#xff0c;物体间一般具有空洞。 三帧差检测&#xff1a;在一定程度上优化了运动物体双边&#xff0c;粗轮廓的现象&#xff0c;相比之下&#xff0c;三帧差法比相邻帧差法更…

openssl3.2 - 官方demo学习 - pkey - EVP_PKEY_DSA_paramfromdata.c

文章目录 openssl3.2 - 官方demo学习 - pkey - EVP_PKEY_DSA_paramfromdata.c概述笔记END openssl3.2 - 官方demo学习 - pkey - EVP_PKEY_DSA_paramfromdata.c 概述 开源工程包含的头文件类型是.inc, 要重命名为.h, 否则没有c头文件语法提示 从数组中载入大数p,q,g 建立ossl…

golang defer 详解

defer 的作用和执行时机 go 的 defer 是用来延迟执行函数的&#xff0c;而且延迟发生在调用函数 return 之后&#xff0c;比如&#xff1a; func a() int {defer b()return 0 }b 的执行是发生在 return 0 之后&#xff0c;注意 defer 的语法&#xff0c;关键字 defer 之后是函…