当前位置: 首页 > news >正文

闯关leetcode——234. Palindrome Linked List

大纲

  • 题目
    • 地址
    • 内容
  • 解题
    • 代码地址

题目

地址

https://leetcode.com/problems/palindrome-linked-list/description/

内容

Given the head of a singly linked list, return true if it is a palindrome or false otherwise.

Example 1:

Input: head = [1,2,2,1]
Output: true

Example 2:

Input: head = [1,2]
Output: false

Constraints:

  • The number of nodes in the list is in the range [1, 105].
  • 0 <= Node.val <= 9

Follow up: Could you do it in O(n) time and O(1) space?

解题

这题就是要检测一个链表是否符合回文结构。一种比较简单的思路就是使用栈来将链表内容反序,然后逐项对比。但是这个方案不符合O(1) space的要求,因为辅助计算的栈中数据大小会随着链表中数据量增大而增大。

回文数的结构是中间对称。虽然使用栈来处理可以避免对“中间”的寻找,但是O(1) space限制了我们对栈的使用。这就促使我们要来寻找“中间”。一种简单的办法就是使用不同速度的指针向后探寻——一个一次向后移动一个元素,一个一次向后移动两个元素。这样快的那个指针会先到链表末尾,而慢的那个指针则会找到“中间”附近的位置。

为什么是“中间”附近的位置呢?因为链表的元素数量可能是奇数,也可能是偶数。如下图所示,如果是奇数,慢指针将指向“中间”的前一个元素;如果是偶数,慢指针指向的是回文左半边的最后一个元素。
在这里插入图片描述
不管慢指针指向的是哪种情况,我们都已让其下一个元素(含)之后的所有元素反转,然后从链表头部开始对比。只要一个链表遍历结束后,仍然没有出现不同值的元素,则可以认为是回文数。
在这里插入图片描述

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) {if (head == nullptr || head->next == nullptr) return true;ListNode* slow = head;ListNode* fast = head->next;while (fast != nullptr && fast->next != nullptr) {slow = slow->next;fast = fast->next->next;}ListNode* pre = nullptr;ListNode* cur = slow->next;slow->next = nullptr;while (cur != nullptr) {ListNode* next = cur->next;cur->next = pre;pre = cur;cur = next;}while (head != nullptr && pre != nullptr) {if (head->val != pre->val) return false;head = head->next;pre = pre->next;}return true;}
};

在这里插入图片描述

代码地址

https://github.com/f304646673/leetcode/blob/main/234-Palindrome-Linked-List/cplusplus/src/solution.hpp

相关文章:

闯关leetcode——234. Palindrome Linked List

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/palindrome-linked-list/description/ 内容 Given the head of a singly linked list, return true if it is a palindrome or false otherwise. Example 1: Input: head [1,2,2,1] Output: tru…...

通过源码分析类加载器里面可以加载的类

类列表 每一个ClassLoader里面的类列表&#xff0c;类的数量都是固定的。 对上一节中的dex反编译 使用DexClassLoader类动态加载插件dex   利用jadx对dex进行反编译可以看到有哪些类 源码分析 BaseDexClassLoader 从BaseDexClassLoader类加载器开始分析 在BaseDexClassLoade…...

RSA算法:数字安全的基石

## RSA算法&#xff1a;数字安全的基石 RSA算法是现代密码学的重要组成部分&#xff0c;它为安全通信和数据保护提供了坚实的基础。本文将探讨RSA算法的基本原理、实施过程以及实际应用场景。 ### 一、RSA算法概述 RSA&#xff08;Rivest-Shamir-Adleman&#xff09;算法是由…...

DPDK高性能处理框架VPP

VPP 环境安装 $ git clone -b stable/1801 https://github.com/FDio/vpp.git $ ./extras/vagrant/build.sh && make 在编译成功以后&#xff0c;会生成上图红色的 deb 表 $ dpkg –i vpp-lib_18.01.2-1~g9b554f3_amd64.deb $ dpkg –i vpp_18.01.2-1~g9b554f3_amd…...

Spring工厂方式实现实例化bean有哪些方式?

在Spring框架中&#xff0c;实例化Bean的方式有多种&#xff0c;其中通过工厂方法&#xff08;Factory Method&#xff09;来创建Bean是一种常见的方式。这种方式允许你通过自定义的工厂类或静态方法来生成Bean实例&#xff0c;从而提供了更灵活和复杂的实例化逻辑。 以下是Sp…...

衡石分析平台系统分析人员手册-指标分析看板

指标分析看板为业务指标量身打造的分析看板。拖拽指标就可形成看板&#xff0c;通过点选对指标分析图表进行配置&#xff0c;整个过程简单易上手。分析人员根据业务分析场景制作图表&#xff0c;无需对指标的数据进行再次加工处理。 指标分析是为业务指标定制的看板&#xff0…...

《C++17 结构化绑定:解锁不同类型处理的秘籍》

在 C17 中&#xff0c;结构化绑定是一个强大且引人注目的特性。它为开发者处理复杂的数据结构和多种类型的返回值提供了一种简洁而高效的方式。然而&#xff0c;正确处理不同类型的绑定和初始化问题是充分发挥这一特性优势的关键。 理解结构化绑定的本质 结构化绑定允许我们使…...

大型音频模型:AudioLLMs

大型音频模型&#xff08;Large Audio Models&#xff0c;简称AudioLLMs&#xff09;是近年来人工智能领域的一个重要研究方向&#xff0c;它们基于深度学习和大模型架构&#xff0c;能够处理和理解复杂的音频数据。以下是对大型音频模型的研究综述&#xff1a; 1. 引言 随着…...

【ShuQiHere】️理解Python中的相对路径:使用 `..` 和 `.` 的指南

【ShuQiHere】️&#x1f31f; 目录 引言什么是相对路径&#xff1f;路径中使用 . 和 ..相对路径的示例使用子文件夹中的数据使用相对路径的最佳实践结论进一步探索 引言 &#x1f30d; 在Python编程中&#xff0c;处理文件时了解如何使用相对路径至关重要。相对路径使我们…...

DMFLDR数据载入使用实践

1、DMFLDR概述 1.1DMFLDR功能介绍 dmfldr&#xff08;DM Fast Loader&#xff09;是 DM 提供的快速数据装载命令行工具。用户通过使用 dmfldr 工具能够把按照一定格式 排序的文本数据以简单、快速、高效的方式载入到 DM 数据库中&#xff0c;或把 DM 数据库中的数据按照一定格…...

发布 NPM 包时,终端显示发布成功但实际上版本并没有更新,可能是由于以下原因

如果发布仍然没有生效&#xff0c;可以检查以下几点&#xff1a; 版本号是否更新&#xff1a; 如果版本号没有更新&#xff0c;NPM 会拒绝发布新的包版本。运行以下命令以确保版本号增加了&#xff1a; bash 复制代码 npm version patch # 更新小版本号 正确的 NPM 注册表&a…...

Java学习Day57:碧水金睛兽!(Spring Cloud微服务1.0)

1.微服务入门 (1).单体架构与分布式架构 单体架构&#xff1a; 将业务的所有功能集中在一个项目中开发&#xff0c;打成一个包部署优点&#xff1a; 架构简单、部署成本低 &#xff1b; 缺点&#xff1a; 耦合度高项目打包部署到Tomcat&#xff0c;用户直接访问。用户量增加后…...

物联网开发教程专栏介绍与专栏说明——列表目录查阅(持续更新)

阿齐Archie《物联网开发&#xff1a;完整实现单片机通信模组云服务器智能应用软件》专栏 为方便查阅学习本专栏&#xff0c;特整理专栏介绍与专栏说明 一、专栏介绍 物联网开发教程专栏目前有P1和P2系列&#xff0c;P1系列为《手把手完整实现STM32ESP8266MQTT阿里云APP应用》…...

uni-app实现app展示进度条在线更新以及定时更新提醒

需求&#xff1a;需要在app启动后进行检查更新&#xff0c;如果有更新就提示更新&#xff0c;可以点击确定更新或者暂时不更新&#xff0c;如果不更新&#xff0c;就将当前的时间进行缓存&#xff0c;并且再次进入时进行对比&#xff0c;只要超过一天时间就继续提醒检查更新 第…...

【Linux】进程间通信(命名管道、共享内存、消息队列、信号量)

作者主页&#xff1a; 作者主页 本篇博客专栏&#xff1a;Linux 创作时间 &#xff1a;2024年11月2日 命名管道&#xff1a; 如果我们想在不相关的进程之间交换数据&#xff0c;可以使用FIFO文件来做这项工作&#xff0c;它经常被称为命名管道。命名管道是一种特殊类型的文…...

[Android]从FLAG_SECURE禁止截屏看surface

在应用中&#xff0c;设置activity的flag为FLAG_SECURE就可以禁止截屏&#xff0c;截屏出来是黑色的&#xff0c; 试验一下&#xff0c; 注意事项 影响&#xff1a; 设置 FLAG_SECURE 标志后&#xff0c;用户将无法对该Activity进行截屏或录制屏幕。这个标志会影响所有屏幕录…...

python 五子棋小游戏

1. 实现效果 Python五子棋小游戏 2. 游戏规则 规则说明&#xff0c;五子棋人机对战游戏规则如下&#xff1a;‌ Ⅰ 默认规则 - 五子棋规则 对局双方‌&#xff1a;各执一色棋子&#xff0c;一方持黑色棋子&#xff0c;另一方持白色棋子。棋盘与开局‌&#xff1a;空棋盘开局…...

JeecgBoot集成工作流实战教程

Activiti是一个轻量级的工作流程和业务流程管理&#xff08;BPM&#xff09;平台&#xff0c;它主要面向业务人员、开发人员和系统管理员。这个平台的核心是一个快速且可靠的Java BPMN 2流程引擎。Activiti是开源的&#xff0c;并且基于Apache许可证进行分发。它可以运行在任何…...

第三十章 章节练习商品列表组件封装

目录 一、需求说明 二、技术要点 三、完整代码 3.1. main.js 3.2. App.vue 3.3. MyTable.vue 3.4. MyTag.vue 一、需求说明 1. my-tag 标签组件封装 (1) 双击显示输入框&#xff0c;输入框获取焦点 (2) 失去焦点&#xff0c;隐藏输入框 (3) 回显标签信息 (4) 内…...

NumPy 高级索引

NumPy 高级索引 NumPy 是 Python 中用于科学计算的核心库之一,它提供了一个强大的N维数组对象和许多用于操作这些数组的函数。在 NumPy 中,除了基本的索引和切片操作外,还提供了高级索引功能,这使得您可以以更加灵活和高效的方式访问和操作数组中的数据。本文将详细介绍 N…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...

django blank 与 null的区别

1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是&#xff0c;要注意以下几点&#xff1a; Django的表单验证与null无关&#xff1a;null参数控制的是数据库层面字段是否可以为NULL&#xff0c;而blank参数控制的是Django表单验证时字…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程

STM32F1 本教程使用零知标准板&#xff08;STM32F103RBT6&#xff09;通过I2C驱动ICM20948九轴传感器&#xff0c;实现姿态解算&#xff0c;并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化&#xff0c;适合嵌入式及物联网开发者。在基础驱动上新增…...

【C++】纯虚函数类外可以写实现吗?

1. 答案 先说答案&#xff0c;可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...