牛客链表题:BM2 链表内指定区间反转

描述

将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转,要求时间复杂度 𝑂(𝑛)O(n),空间复杂度 𝑂(1)O(1)。
例如:
给出的链表为 1→2→3→4→5→𝑁𝑈𝐿𝐿  ,m=2,n=4,
返回 1→4→3→2→5→𝑁𝑈𝐿𝐿.

数据范围: 链表长度 0<𝑠𝑖𝑧𝑒≤10000,0<𝑚≤𝑛≤𝑠𝑖𝑧𝑒,链表中每个节点的值满足 ∣𝑣𝑎𝑙∣≤1000

要求:时间复杂度 𝑂(𝑛)O(n) ,空间复杂度 𝑂(𝑛)O(n)

进阶:时间复杂度 𝑂(𝑛)O(n),空间复杂度 𝑂(1)O(1)

示例1

输入:

{1,2,3,4,5},2,4

返回值:

{1,4,3,2,5}

示例2

输入:

{5},1,1

返回值:

{5}

思路:

这道题的关键是:

①找到“需要转换的序列”前面“最后一个无需转换的节点位置”;

②找到“需要转换的序列”的“第一个节点”;

③找到“需要转换的序列”后“第一个无需转换的节点”。

代码

/*** struct ListNode {*	int val;*	struct ListNode *next;*	ListNode(int x) : val(x), next(nullptr) {}* };*/
class Solution {
public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param head ListNode类 * @param m int整型 * @param n int整型 * @return ListNode类*/ListNode* reverseBetween(ListNode* head, int m, int n) {// write code hereListNode *cur = head, *tmp, *first = head;ListNode* nhead=new ListNode(-1);//哑节点(虚拟头节点),为了防止m=n=1时,tmp取不到最后一位不需要逆序的节点,而取到了和cur一样的第一位需要逆序的节点nhead ->next = head;tmp = nhead;for(int i = 1; i<m; i++){tmp = cur;//tmp取到需要逆序的前一位cur = cur->next;//cur取到需要逆序的第一位} first = cur;//first用于记住第一位需要逆序的节点,即逆序后的最后一位,用于在最后连接上剩下无需逆序的序列。for(int i = m; i <=n; i++)//循环需要逆序的序列中的节点,并连接在tmp后(记住:tmp正是无需逆序的最后一个节点){ListNode *next = cur->next;//用于存放剩下的全部节点cur->next = tmp->next;tmp->next = cur;//以上两句是重点,由于无法直接在tmp节点后加节点cur,因此先把cur也连接在tmp的后一个节点,然后将tmp->next指向cur,则成功加入节点curcur = next;}first->next = cur;//连接上剩下无需逆序的节点cur = nhead->next;//丢弃哑节点delete nhead;return cur;}
};

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

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

相关文章

分表分库是一种数据库架构的优化策略,用于处理大规模数据和高并发请求,提高数据库的性能和可扩展性。

分表分库是一种数据库架构的优化策略&#xff0c;用于处理大规模数据和高并发请求&#xff0c;提高数据库的性能和可扩展性。以下是一些常见的分表分库技术方案&#xff1a; 1. **水平分表&#xff08;Horizontal Sharding&#xff09;**&#xff1a; - 将单表数据根据某个…

【机器学习】基于线性回归的医疗费用预测模型

文章目录 一、线性回归定义和工作原理假设表示 二、导入库和数据集矩阵表示可视化 三、成本函数向量的内积 四、正态方程五、探索性数据分析描述性统计检查缺失值数据分布图相关性热图保险费用分布保险费用与性别和吸烟情况的关系保险费用与子女数量的关系保险费用与地区和性别…

GDP播放器 驱动视频播放器 PHP 系统源码 v4.4.3

最重要的是我们自己开发了源代码&#xff0c;因此无论您在使用此工具时遇到什么问题&#xff0c;我们都会快速解决。这个版本演示 分别支持PHP7.4/8.1/8.2三个版本 演示地址

轻松驾驭开发之旅:Maven配置阿里云CodeUp远程私有仓库全攻略

文章目录 引言一、为什么选择阿里云CodeUp作为远程私有仓库&#xff1f;二、Maven配置阿里云CodeUp远程私有仓库的步骤准备工作配置Maven的settings.xml文件配置项目的pom.xml文件验证配置是否成功 三、使用阿里云CodeUp远程私有仓库的注意事项 引言 在软件开发的世界里&#…

CosyVoice - 阿里最新开源语音克隆、文本转语音项目 支持情感控制及粤语 本地一键整合包下载

近日&#xff0c;阿里通义实验室发布开源语音大模型项目FunAudioLLM&#xff0c;而且一次包含两个模型&#xff1a;SenseVoice和CosyVoice。 CosyVoice专注自然语音生成&#xff0c;支持多语言、音色和情感控制&#xff0c;支持中英日粤韩5种语言的生成&#xff0c;效果显著优于…

强化学习与控制模型结合例子

强化学习与模型控制结合 强化学习(Reinforcement Learning, RL)与控制模型结合,可以通过整合传统控制理论和现代RL算法,利用控制模型提供的动态信息和稳定性保障,同时利用RL的学习能力优化控制策略。这种结合的方式被称为模型辅助强化学习(Model-Assisted Reinforcement…

分子AI预测赛Task4笔记(结束)

话不多说&#xff0c;直接上官方链接&#xff1a;‌​​​‍&#xfeff;​⁠​‌​‍​​&#xfeff;​‌​⁠‬​&#xfeff;‬​​‌​​​​‬‬​​​​‍⁠‍‌​&#xfeff;⁠Task3&#xff1a;进阶baseline详解 - 飞书云文档 (feishu.cn)Task4&#xff1a;持续尝试&…

计算机项目介绍汇总——项目展示及购买

计算机项目介绍汇总 本文没有具体的项目内容介绍&#xff0c;只罗列我所发布的所有的项目的代码&#xff0c;主要包括Java和Python两门语言开发的相关项目&#xff0c;由于时间和个人精力问题&#xff0c;部分项目将在后续逐步更新。由于发布的项目都是投入了本人精力和时间&am…

C++左值右值

在C中&#xff0c;左值&#xff08;lvalue&#xff09;和右值&#xff08;rvalue&#xff09;是表达式分类的关键概念&#xff0c;它们主要影响表达式的赋值、函数调用以及操作符的使用方式。这些概念在C11及以后的版本中变得更加重要&#xff0c;因为引入了移动语义和右值引用…

妈妈带女儿美在心里

在这个充满温情与惊喜的午后&#xff0c;阳光温柔地洒落在每一个角落&#xff0c;仿佛连空气弥漫着幸福的味道。就在这样一个平凡的时刻&#xff0c;一段关于爱与成长的温馨画面&#xff0c;悄然在网络上绽放&#xff0c;引爆了无数人的心弦——#奚梦瑶2岁女儿身高#&#xff0c…

Android高级——智能指针

智能指针 智能指针是一种能够自动维护对象引用计数的技术 引用了一个实际使用的对象&#xff0c;而不是一个指针智能指针构造时&#xff0c;增加它所引用的对象的引用计数智能指针析构时&#xff0c;减少它所引用的对象的引用计数 但智能指针无法解决循环引用问题&#xff0…

【CSharp】获得结构体内字段占用的内存大小

【CSharp】获得结构体内字段占用的内存大小 1.背景2.代码3.说明1.背景 C#结构体:从C/C++时代迁移过来的经典。 struct结构体和class类非常相似,他们都能定义数据结构。 可以理解成class类是struct结构体的升级版。 博主以为最大的区别:struct结构体是值类型,而class类是引…

【Linux进程】命令行参数 环境变量(详解)

目录 前言 1. 命令行参数 什么是命令行参数? 2. 环境变量 常见的环境变量 如何修改环境变量? 获取环境变量 环境变量的组织方式 拓展问题 导入环境变量 3. 本地变量* 总结 前言 在使用Linux指令的时候, 都是指令后边根命令行参数, 每个指令本质都是一个一个的可执行程…

【UE5.1 角色练习】13-枪械射击——拿出与收起武器

目录 效果 步骤 一、安装射击武器 二、拿武器和收武器 效果 步骤 一、安装射击武器 1. 在虚幻商城中将“FPS Weapon Bundle”添加到工程中&#xff0c;由于我们使用的是5.1版本&#xff0c;我们可以先将该资产放入UE4工程中&#xff0c;然后迁移到5.1版本的工程 2. 打开角…

一.2.(4)放大电路静态工作点的稳定;(未完待续)

1.Rb对Q点及Au的影响 输入特性曲线&#xff1a;Rb减少&#xff0c;IBQ&#xff0c;UBEQ增大 输出特性曲线&#xff1a;ICQ增大&#xff0c;UCEQ减少 AUUO/Ui分子减少&#xff0c;分母增大&#xff0c;但由于分子带负号&#xff0c;所以|Au|减少 2.Rc对Q点及Au的影响 输入特性曲…

css之transform-origin

transform-origin 是 CSS 中的一个属性&#xff0c;它允许你改变一个元素变形的原点。默认情况下&#xff0c;变形的原点位于元素的中心点&#xff0c;即50% 50%&#xff08;或 center center&#xff09;。但是&#xff0c;通过使用 transform-origin 属性&#xff0c;你可以将…

【JavaSE复习】数据结构、集合

JavaSE 复习 1.数据结构1.1 查找1.1.1 基本查找1.1.2 二分查找1.1.3 插值查找1.1.4 斐波那契查找1.1.5 分块查找1.1.6 分块查找的扩展&#xff08;无规律数据&#xff09; 1.2 排序1.2.1 冒泡排序1.2.2 选择排序1.2.3 插入排序1.2.4 快速排序 2. 集合2.1 基础集合2.1.1 集合和数…

React中的useCallback

引言 在React应用开发中&#xff0c;优化组件性能是一个持续的过程。useCallback是一个React Hook&#xff0c;它用于记忆化回调函数&#xff0c;确保这些函数在组件的整个生命周期内保持一致&#xff0c;从而避免不必要的渲染和性能问题。 问题背景 在React中&#xff0c;如…

【玩转python】入门篇day09-python数据类型转换

在Python中&#xff0c;数据类型转换是一项非常常见的操作&#xff0c;它允许我们将一种类型的数据转换为另一种类型。这种转换在处理来自不同源的数据时尤其有用&#xff0c;例如用户输入、文件读取或网络数据等。下面&#xff0c;我将通过代码示例来展示如何将其他数据类型转…

android 在清单文件中配置receiver,系统是何时会注册此广播接收者的?

在 Android 中&#xff0c;通过清单文件&#xff08;AndroidManifest.xml&#xff09;配置的广播接收器&#xff08;BroadcastReceiver&#xff09;&#xff0c;系统会在特定的时机自动注册这些广播接收器。以下是详细的说明&#xff1a; 静态注册的广播接收器 静态注册的广播…