【C++】每日一题 92 反转链表

给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。

class ListNode {
public:int val;ListNode* next;ListNode(int _val) {val = _val;next = nullptr;}
};ListNode* reverseBetween(ListNode* head, int left, int right) {if (head == nullptr || left == right) {return head;}ListNode dummy(0);dummy.next = head;ListNode* pre = &dummy;for (int i = 0; i < left - 1; i++) {pre = pre->next;}ListNode* cur = pre->next;for (int i = 0; i < right - left; i++) {ListNode* next = cur->next;cur->next = next->next;next->next = pre->next;pre->next = next;}return dummy.next;
}

先创建一个虚拟头节点 dummy,然后找到需要反转位置的前一个节点 pre。接着进行反转操作,将节点逐个插入到 pre 节点之后,最后返回虚拟头节点的 next 即可得到反转后的链表。

关键反转操作在第二个for循环,(第一个for循环是为了寻找起始操作位置),第二个for循环每次迭代都会将当前节点的后继指针指向前一个节点,从而改变了链表中节点的指向关系,实现了反转效果。

具体解释如下:

在开始循环之前,pre 指针指向要反转区间的前一个节点,cur 指针指向要反转区间的第一个节点,next 指针指向 cur 的下一个节点。
首先,将 cur->next 指向 next->next,即将 cur 节点的后继指针指向 next 节点的后一个节点,断开了 cur 节点与 next 节点的联系。
然后,将 next->next 指向 pre->next,即将 next 节点的后继指针指向 pre 节点的后一个节点,将 next 节点插入到 pre 节点之后。
最后,更新 pre、cur 和 next 指针,使它们分别指向下一个节点,继续进行下一轮反转操作。
通过以上操作,循环不断地将当前节点的后继指针指向前一个节点,实现了链表节点的反转。最终完成循环后,pre 指针所指向的节点就是反转后的链表头节点,整个区间的节点也实现了反转。

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

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

相关文章

AcWing 1211. 蚂蚁感冒

Problem: AcWing 1211. 蚂蚁感冒 文章目录 思路解题方法复杂度Code 思路 这是一个模拟题。题目的意思是&#xff0c;如果一只蚂蚁感冒了&#xff0c;那么它会把感冒传给所有和它相向而行的蚂蚁。所以我们只需要找出所有和第一只蚂蚁相向而行的蚂蚁就可以了。具体来说&#xff0…

vue中的性能优化

Vue.js 性能优化是提高应用性能和用户体验的关键之一。以下是一些常见的 Vue.js 性能优化方法&#xff1a; 使用 Vue Devtools 进行性能分析&#xff1a; Vue Devtools 是一个强大的浏览器扩展&#xff0c;可以帮助开发者实时监测 Vue 应用的性能指标、组件状态和数据流&#x…

LabelImg:一个简单易用的图像标注工具

目录 LabelImg是什么&#xff1f; 如何使用LabelImg进行图像标注&#xff1f; LabelImg的优势和应用场景 在哪里下载它 随着人工智能技术的不断发展&#xff0c;机器学习和深度学习在图像识别、目标检测等领域中得到了广泛的应用。而要训练一个有效的模型&#xff0c;通常需…

Vue3+ts(day02:CompositionAPI、setup)

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/frontlearningNotes 觉得有帮助的同学&#xff0c;可以点心心支持一下哈&#xff08;笔记是根据b站上学习的尚硅谷的前端视频【张天禹老师】&#xff0c;记录一下学习笔记&#xff0c;用于自己复盘&#xff0c;有需要学…

备忘录怎么导出数据 备忘录数据导出方法

在忙碌的生活中&#xff0c;我时常依赖于备忘录来记录重要的信息&#xff0c;从工作截止日期到生活琐事&#xff0c;无一不靠它来帮我分担记忆的压力。但随着时间的推移&#xff0c;我发现有时候我不仅仅需要在软件内查看这些信息&#xff0c;还需要将它们导出&#xff0c;或许…

【数据库】软件测试之MySQL数据库练习题目

有表如下&#xff1a; Student 学生表 SC 成绩表 Course 课程表 Teacher 老师表 每个学生可以学习多门课程&#xff0c;每一个课程都有得分&#xff0c;每一门课程都有老师来教&#xff0c;一个老师可以教多个学生 1、查询姓‘朱’的学生名单 select * from Student whe…

【深度学习笔记】优化算法——Adam算法

Adam算法 &#x1f3f7;sec_adam 本章我们已经学习了许多有效优化的技术。 在本节讨论之前&#xff0c;我们先详细回顾一下这些技术&#xff1a; 在 :numref:sec_sgd中&#xff0c;我们学习了&#xff1a;随机梯度下降在解决优化问题时比梯度下降更有效。在 :numref:sec_min…

Docker创建openresty容器

1.拉取最新images docker pull openresty/openresty:latest 2.创建简单容器 docker run -itd --restartunless-stopped \--name openresty \-p 80:80 \openresty/openresty:latest 3.创建成功后将重要配置文件从容器中复制出来&#xff0c;方便后续挂载。/data/docker/open…

力扣--动态规划5.最长回文子串

class Solution { public:string longestPalindrome(string s) {// 获取输入字符串的长度int n s.size();// 如果字符串长度为1&#xff0c;直接返回原字符串&#xff0c;因为任何单个字符都是回文串if (n 1)return s;// 创建一个二维数组dp&#xff0c;用于记录子串是否为回…

React-路由小知识

1.默认路由 说明&#xff1a;当访问的是一级路由时&#xff0c;默认的二级路由组件可以得到渲染&#xff0c;只需要在二级路由的位置去掉path,设置index.属性为true。 2.404路由 说明&#xff1a;当浏览器输入ul的路径在整个路由配置中都找不到对应的pth,为了用户体验&#x…

《农商网》商业计划书(附模板下载)

在当今互联网高速发展的时代&#xff0c;农业与电子商务的结合成为了新的经济增长点。《农商网》商业计划书详细阐述了一个以大学生创业为核心的创新项目&#xff0c;旨在通过打造一个全新的农产品在线交易平台&#xff0c;实现农产品的高效流通和价值最大化。该计划书首先对市…

amv是什么文件格式?如何播放amv视频?

AMV文件格式源自于中国公司Actions Semiconductor&#xff0c;最初作为其MP4播放器中使用的专有视频格式。产生于数码媒体发展的需求下&#xff0c;AMV格式为小屏幕便携设备提供了一种高度压缩的视频存储方案。 AMV文件格式的主要特性与使用场景 AMV格式以其独特的特性在小尺寸…

【活动】探索人工智能的“迷惑瞬间”:真实体验与技术挑战

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 标题&#xff1a;探索人工智能的“迷惑瞬间”&#xff1a;真实体验与技术挑战引言…

Elasticsearch:dense vector 数据类型及标量量化

密集向量&#xff08;dense_vector&#xff09;字段类型存储数值的密集向量。 密集向量场主要用于 k 最近邻 (kNN) 搜索。 dense_vector 类型不支持聚合或排序。 默认情况下&#xff0c;你可以基于 element_type 添加一个 dend_vector 字段作为 float 数值数组&#xff1a; …

学习Java的第七天

目录 一、什么是数组 二、作用 三、如何使用数组 1、声明数组变量 2、创建数组 示例&#xff1a; 3、数组的使用 示例&#xff1a; 4、数组的遍历 for循环示例&#xff08;不知道for循环的可以查看我之前发的文章&#xff09; for-each循环&#xff08;也就是增强for…

Python的模块应用和文件I/O

Python 解释 Python是一种高级编程语言&#xff0c;以其简洁、易读和易用而闻名。它是一种通用的、解释型的编程语言&#xff0c;适用于广泛的应用领域&#xff0c;包括软件开发、数据分析、人工智能等。python是一种解释型&#xff0c;面向对象、动态数据类型的高级程序设计…

Unity基础学习

目录 基础知识点3D数学——基础Mathf三角函数坐标系 3D数学——向量向量模长和单位向量向量的加减乘除向量点乘向量叉乘向量插值运算 3D数学——四元数为何使用四元数四元数是什么四元数常用方法四元数计算 MonoBehavior中的重要内容延迟函数协同程序协同程序原理 Resources资源…

STM32CubeIDE基础学习-STM32CubeIDE软件工程文件拷贝粘贴

STM32CubeIDE基础学习-STM32CubeIDE软件工程文件拷贝粘贴 前言 在后面开发程序时&#xff0c;往往不需要再重新新建工程的了&#xff0c;可以直接在原有的工程基础上直接复制粘贴新增功能就可以了。 具体的操作方法步骤如下介绍&#xff1a; 第一步&#xff1a;找到一个原有的…

对比学习 自监督学习笔记

目录 对比学习 理解&#xff0c;我推荐这篇博客&#xff1a; python代码实现&#xff1a; 自监督学习cvpr2022推荐 SimCLR 2021 对比学习 理解&#xff0c;我推荐这篇博客&#xff1a; 对比学习&#xff08;Contrastive Learning&#xff09; - 知乎 python代码实现&#…

最小生成树算法:Prim 算法、Kruskal 算法

最小生成树算法 最小生成树&#xff08;Minimum Spanning Tree&#xff0c;MST&#xff09;是图论中一个重要的概念&#xff0c;表示连接图中所有顶点的树&#xff0c;同时保证总权值最小。 比较&#xff1a; 贪心策略的不同&#xff1a; Prim 算法是一种顶点驱动的贪心算法&…