02.06、回文链表
02.06、[简单] 回文链表
1、题目描述
编写一个函数,检查输入的链表是否是回文的。
2、解题思路:
- 快慢指针找中点:
- 利用快慢指针的技巧来找到链表的中间节点。慢指针
slow每次移动一步,而快指针fast每次移动两步。这样,当快指针到达链表末尾时,慢指针恰好位于链表中间。
- 利用快慢指针的技巧来找到链表的中间节点。慢指针
- 反转后半部分链表:
- 在找到中间节点后,将链表的后半部分反转。我们从
slow->next开始反转链表,最终newhead将指向反转后的后半部分链表的头节点。
- 在找到中间节点后,将链表的后半部分反转。我们从
- 对比前半部分和后半部分:
- 反转链表的后半部分后,将它与前半部分进行比较。如果所有节点值相等,则说明链表是回文的。
- 返回结果:
- 如果比较过程中发现不一致,则返回
false。如果全部节点相等,则返回true。
- 如果比较过程中发现不一致,则返回
3、代码实现与详细注释
class Solution {
public:bool isPalindrome(ListNode* head) {// 如果链表为空或只有一个节点,直接返回 trueif (head == nullptr || head->next == nullptr) {return true;}// 使用快慢指针找到链表的中间节点ListNode* fast = head;ListNode* slow = head;while (fast->next && fast->next->next) {slow = slow->next; // 慢指针每次移动一步fast = fast->next->next; // 快指针每次移动两步}// 将链表的后半部分反转ListNode* newhead = slow->next; // newhead 指向后半部分的开始节点ListNode* prev = nullptr; // 用于反转链表while (newhead->next) {ListNode* next = newhead->next; // 保存下一个节点newhead->next = prev; // 当前节点的 next 指向前一个节点prev = newhead; // prev 指向当前节点,逐步推进newhead = next; // newhead 移动到下一个节点}newhead->next = prev; // 最后一个节点反转后,形成新的链表// 对比前半部分和反转后的后半部分是否相同slow = head; // slow 回到链表头部while (newhead) { // 遍历反转后的链表if (newhead->val != slow->val) { // 如果值不相等,返回 falsereturn false;}slow = slow->next; // 两个指针同时移动newhead = newhead->next;}// 如果链表前后部分相同,则返回 truereturn true;}
};
4、时间复杂度和空间复杂度:
- 时间复杂度: O(n),其中 n 是链表的长度。我们遍历链表两次,一次是找到中点,另一次是进行比较。
- 空间复杂度: O(1),因为只使用了常数额外空间。
这个方法通过快慢指针和链表反转的技巧,避免了额外的空间开销,是一个比较高效的解决方案。
相关文章:
02.06、回文链表
02.06、[简单] 回文链表 1、题目描述 编写一个函数,检查输入的链表是否是回文的。 2、解题思路: 快慢指针找中点: 利用快慢指针的技巧来找到链表的中间节点。慢指针 slow 每次移动一步,而快指针 fast 每次移动两步。这样&…...
Shell脚本小练习
学习了这么长时间Shell脚本,总得来一次小小的练习吧,那么请看下文! 1.用Shell写一个小计算器。 通过read命令获取用户输入的表达式,表达式的格式设定为操作数1 运算符 操作数2,例如53,然后利用设计的脚本…...
四轮转向轮式里程计设计(python)
目录 写在前面的话参考教程官方教程参考代码(c) 关键代码解析订阅车轮速度订阅车轮转向订阅四轮转向控制模式积累速度和转向角发布里程计 完整代码完整视频演示 写在前面的话 上一篇博客:键盘控制车子四轮转向 这篇文章通过订阅车轮的速度和…...
多方法做配对样本t检验(三)
Wilcoxon符号秩检验 Wilcoxon符号秩检验(Wilcoxon Signed-Rank Test) 是一种非参数统计方法,用于检验两组相关样本(配对样本)之间的差异是否显著。它通常用来代替配对样本t检验,特别是在数据不符合正态分布…...
Vue 将推出「无虚拟DOM」版本,又是新的前端框架趋势?
文章目录 背景无虚拟DOM版的Vue3Vue Vapor 在线演练题外话:渲染流程 背景 随着 React 和 Vue 这些前端框架的爆火,他们的渲染方式,虚拟DOM,也跟着火了起来,大家都认为这是一种高性能批量更新DOM的方式但是近一两年有不…...
阿里云ECS服务器磁盘空间不足的几个文件
查看磁盘空间命令: df -h /mnt 清零 echo >nohup.out 磁盘空间不足的文件列表: 一、nohup.out:来自"nohup java -jar service.jar &"命令产生的文件,位置在服务jar所在目录 二、access.log:位于…...
从0开始linux(38)——线程(1)线程概念
欢迎来到博主专栏:从0开始linux 博主ID:代码小豪 文章目录 进程与线程线程概念线程的优点线程的独立数据 进程与线程 如果要理解线程,那么进程将会时绕不开的点。首先我们回顾一下我们之前在进程章节当中是如何描述进程的? 进程&…...
Ubuntu源码安装gitlab13.7集群多前端《二》
Ubuntu源码安装gitlab13.7《一》 gitaly需要调整的服务 redis socket->ipbind ....* # 0.0.0.0pg vim /etc/postgresql/14/main/pg_hba.confhost all all ..../32 md5gitaly vim /home/git/gitaly/config.tomlbin_dir "/home/gi…...
身份证OCR 识别 API 接口的发展前景
随着信息时代的到来,大量的身份证数据需要进行整理、存储和管理,OCR 识别技术可以将身份证信息转化为结构化的电子文本,方便后续的数据管理和分析,提高工作效率。 未来,随着人工智能和深度学习等技术的不断发展&#…...
Spring boot之BeanDefinition介绍
在spring框架中IOC容器进行bean的创建和管理。Bean的创建是一个比较复杂的过程,它并不像我们创建对象一样只是直接new一下就行,虽然有些bean确实就是New一下。但在Spring中可以通过一些途径对bean进行增强扩展。在这个过程中,BeanDefinition作…...
30分钟学会正则表达式
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。 作用 匹配 查看一个字符串是否符合正则表达式的语法 搜索 正…...
Python 自动化办公的 10 大脚本
大家好,我是你们的 Python 讲师!今天我们将讨论 10 个实用的 Python 自动化办公脚本。这些脚本可以帮助你简化日常工作,提高效率。无论是处理 Excel 文件、发送邮件,还是自动化网页操作,Python 都能派上用场。 1. 批量…...
Python蒙特卡罗MCMC:优化Metropolis-Hastings采样策略Fisher矩阵计算参数推断应用—模拟与真实数据...
全文链接:https://tecdat.cn/?p38397 本文介绍了其在过去几年中的最新开发成果,特别阐述了两种有助于提升 Metropolis - Hastings 采样性能的新要素:跳跃因子的自适应算法以及逆 Fisher 矩阵的计算,该逆 Fisher 矩阵可用作提议密…...
成绩排序
成绩排序 C语言代码C 代码Java代码Python代码 💐The Begin💐点点关注,收藏不迷路💐 给出班里某门课程的成绩单,请你按成绩从高到低对成绩单排序输出,如果有相同分数则名字字典序小的在前。 输入 第一行为…...
MySQL底层概述—7.优化原则及慢查询
大纲 1.Explain概述 2.Explain详解 3.索引优化数据准备 4.索引优化原则详解 5.慢查询设置与测试 6.慢查询SQL优化思路 1.Explain概述 使用Explain关键字可以模拟查询优化器来执行SQL查询语句,从而知道MySQL是如何处理SQL语句的,从而分析出查询语句…...
R““有什么作用在C++中,举例说明
在C中,R""(双引号前加R)表示一个原始字符串字面量(Raw String Literal),其主要作用是让字符串中的反斜杠\和其他特殊字符不被当作转义字符处理,而是保留其原始字面意义。这在处理包含…...
linux中top 命令返回数据解释
当您在 Linux 终端中运行 top 命令时,它会显示一个动态更新的系统状态视图,其中包括许多有关系统性能的数据。下面是对 top 命令返回数据的详细解释: 标题栏 top - 22:46:12 up 2 days, 3:14, 1 user, load average: 0.05, 0.07, 0.09 22:46:12:当前时间。up 2 days, 3:14…...
深入理解二叉树及其变体:平衡二叉树、红黑树、B-树和B+树
一、二叉树简介 二叉树是一种非常常见的数据结构,它具有以下特点: 每个节点最多有两个子节点,分别称为左子节点和右子节点。每个节点的左子树和右子树都是二叉树。 二叉树的常见操作包括:创建、插入、删除、查找、遍历等。下面…...
C++ 编程技巧之StrongType(1)
最近看到一个NamedType的开源库,被里面的Strong Type这个概念和里面的模版实现给秀了一脸,特此总结学习一下 GitHub - joboccara/NamedType: Implementation of strong types in C C本身是一种强类型语言,类型包括int、double等这些build i…...
芯片测试-smith圆图
smith圆图 💢smith圆图的故事💢💢smith圆图中的各部分来历💢💢公式推导💢💢等电阻圆特点💢💢等电抗圆💢💢等电抗圆特点💢 Ὂ…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验
Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...
自然语言处理——文本分类
文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益(IG) 分类器设计贝叶斯理论:线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别, 有单标签多类别文本分类和多…...
