92. 反转链表 II【 力扣(LeetCode) 】

news2024/9/21 4:33:35

一、题目描述

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

进阶: 你可以使用一趟扫描完成反转吗?

二、测试用例

示例 1:

在这里插入图片描述

输入:head = [1,2,3,4,5], left = 2, right = 4
输出:[1,4,3,2,5]

示例 2:

输入:head = [5], left = 1, right = 1
输出:[5]

提示:

链表中节点数目为 n
1 <= n <= 500
-500 <= Node.val <= 500
1 <= left <= right <= n

三、解题思路

  1. 基本思路:
      头插法。【链表设计反转结点的基本都可以用头插法】
  2. 具体思路:
    • 预处理:为了方便后续操作,可以为链表添加一个头指针
    • 定义:pre 表示需要反转的结点的前一个结点;l 表示需要反转的第一个结点;p 用于遍历反转结点;t 用于进行头插法时进行临时存储;
    • 遍历链表:
      • 先定位到需要反转的结点,即确定 pre ;
      • 将要反转的结点使用头插法插入到 pre 的后面;
      • 插完后,将需要反转的第一个结点指针指向需要反转的最后一个结点指向的结点;

四、参考代码

时间复杂度: O ( n ) \Omicron(n) O(n)
空间复杂度: O ( 1 ) \Omicron(1) O(1)

/**
 * 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:
    ListNode* reverseBetween(ListNode* head, int left, int right) {
        // 头插法
        ListNode *ans=new ListNode(),*pre=ans;
        ans->next=head;

        for(int i=1;i<left;i++){
            pre=pre->next;
        }

        ListNode *p=pre->next,*t=nullptr,*l=pre->next;

        for(int i=right-left;i>=0;i--){
            t=p->next;
            p->next=pre->next;
            pre->next=p;
            p=t;
        }
        l->next=t;

        return ans->next;
    }
};

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

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

相关文章

第三部分:2---进程理解/Linux下进程初识

目录 操作系统如何管理进程&#xff1f; 进程的结构体&#xff1a; 操作系统如何加载进程&#xff1f; CPU如何调度进程&#xff1f; 进程如何在多个队列排队&#xff1a; offsetof宏&#xff1a; 进程标识符&#xff1a; 程序打印自己的pid和ppid&#xff1a; 杀死进程…

Java重修笔记 第五十三天 坦克大战(一)绘图入门

绘制简单的图形 1. 创建画板 定义一个画板类&#xff0c;通过继承 JPanel 类来创建画板 2. 创建画笔 在画板类中调用 paint 方法&#xff0c;并传入一个 Graphics g 对象&#xff0c;通过对 g 对象的操作来实现画画的过程 3. 开始作画 调用 Graphics g 对象的方法在 paint …

驰域货车四路监控ts视频格式化恢复方法

不少大货车都使用了驰域货车监控&#xff0c;一般是至少装四路&#xff0c;前后左右&#xff0c;有的还会车顶加一路。驰域货车记录仪特殊的地方在于&#xff1a;其采用了一种上古时期的视频格式----TS视频流。 故障存储: 128G卡/fat32 故障现象: 客户提供的信息是格式化后…

193页WORD省级智慧高速公路投标技术方案

关注智慧方案文库&#xff0c;学习9000多份智慧城市&#xff0c;智慧医院&#xff0c;智能制造&#xff0c;数字化转型&#xff0c;新质生产力&#xff0c;算力&#xff0c;大模型&#xff0c;AIGC&#xff0c;工业互联网&#xff0c;数字孪生......持续更新热点行业解决方案。…

云曦2024秋季开学考

ezezssrf 第一关&#xff1a;md5弱比较 yunxi%5B%5D1&wlgf%5B%5D2 第二关&#xff1a; md5强比较 需要在bp中传参&#xff0c;在hackbar里不行 yunxiiM%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DC V%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_B…

机器学习(西瓜书)第 6 章 支持向量机

6.1 算法原理 感知机要求就随便找一个超平面&#xff0c;只要能把正负样本分开就行 但是支持向量机不一样&#xff0c;它认为你不仅得把它分开&#xff0c;而且这个超平面还得尽可能的离正负样本远 6.2 间隔与支持向量 其中w (wi&#xff1b;w2;…;wd)为法向量&#xff0c;决…

基于51单片机的打点滴监控系统proteus仿真

地址&#xff1a;https://pan.baidu.com/s/1l3OxHLBwOzsChKHCJsAySQ 提取码&#xff1a;1234 仿真图&#xff1a; 芯片/模块的特点&#xff1a; AT89C52/AT89C51简介&#xff1a; AT89C52/AT89C51是一款经典的8位单片机&#xff0c;是意法半导体&#xff08;STMicroelectron…

深入探索:自适应中值滤波器在图像去噪中的应用

在数字图像处理领域&#xff0c;噪声是影响图像质量的重要因素之一。椒盐噪声&#xff0c;作为常见的一种噪声&#xff0c;会在图像中随机产生过度黑或过度白的像素&#xff0c;严重影响图像的视觉质量。为了有效去除这类噪声&#xff0c;自适应中值滤波器&#xff08;AMF&…

《论应用服务器基础软件》写作框架,软考高级系统架构设计师

论文真题 应用服务器是在当今基于互联网的企业级应用迅速发展,电子商务应用出现并快速膨胀的需求下产生的一种新技术。在分布式、多层结构及基于组件和服务器端程序设计的企业级应用开发中,应用服务器提供的是一个开发、部署、运行和管理、维护的平台,提供软件“集群”功能…

二十三种模式之原型模式(类比制作陶器更好理解一些)

1. 设计模式的分类 创建型模式(五种)&#xff1a;工厂方法模式、单例模式、抽象工厂模式、原型模式、建造者模式。 结构型模式(七种)&#xff1a;适配器模式、代理模式、装饰器模式、桥接模式、外观模式、享元模式、组合模式。 行为型模式(十一种)&#xff1a;状态模式、模板方…

re题(16)BUUCTF-Java逆向解密

BUUCTF在线评测 (buuoj.cn)BUUCTF在线评测 (buuoj.cn) jadx 1.4.4安装&#xff1a;jadx-gui-1.4.4 反编译工具使用教程 - 莫贞俊晗 - 博客园 (cnblogs.com) 认识.class&#xff1a; Java-初识 .class 文件_class文件怎么打开-CSDN博客 用查壳工具也可以知道是java写的 放到ja…

Ocelot + Consul 无法转发IP问题

现象 Ocelot Concul 进行访问 Ocelot Concul 服务都部署在同一台机器上时&#xff0c;访问正常 服务部署在另外一台机器上时&#xff0c;无法访问 显示 102 (unknown) status code of request URI: 发现Ocelot 日志显示是 hostname/api 所有 换了一台电脑就无法访问了 Ocel…

LabVIEW回转马达试验系统

基于LabVIEW的回转马达试验台通过高度集成的硬件与软件配合&#xff0c;实现对回转马达的各项性能测试&#xff0c;包括空载排量、跑合试验和冲击试验等&#xff0c;以满足出厂测试的严格标准和要求。 项目背景 回转马达作为多种机械设备的核心动力源&#xff0c;其性能的可靠…

一文搞定高并发编程:CompletableFuture的supplyAsync与runAsync

CompletableFuture是Java 8中引入的一个类&#xff0c;用于简化异步编程和并发操作。它提供了一种方便的方式来处理异步任务的结果&#xff0c;以及将多个异步任务组合在一起执行。CompletableFuture支持链式操作&#xff0c;使得异步编程更加直观和灵活。 在引入CompletableFu…

Python(TensorFlow和PyTorch)及C++注意力网络导图

&#x1f3af;要点 谱图神经网络计算注意力分数对比图神经网络、卷积网络和图注意力网络药物靶标建模学习和预测相互作用腹侧和背侧皮质下结构手写字体字符序列文本识别组织病理学图像分析长短期记忆财务模式预测相关性生物医学图像特征学习和迭代纠正 Python注意力机制 对…

Java面试篇基础部分-Java 实现的I/O方式

Java I/O 在整个的java.io包中提供了5个重要的I/O类和1个接口类。5个类分别是File、OutputStream、InputStream、Writer、Reader ,1个接口是指Serializable序列化接口。具体的使用方式可以查看JDK的参考文档。 Java NIO 实现 Java NIO的实现内容主要有如下的三个核心内容 Sel…

使用Vue3.5的onWatcherCleanup封装自动cancel的fetch函数

前言 在欧阳的上一篇 这应该是全网最详细的Vue3.5版本解读文章中有不少同学对Vue3.5新增的onWatcherCleanup有点疑惑&#xff0c;这个新增的API好像和watch API回调的第三个参数onCleanup功能好像重复了。今天这篇文章来讲讲新增的onWatcherCleanup函数的使用场景&#xff1a;…

《 C++ 容器全景指南:五 》深入探索 C++ 标准库中的 stack 与 queue 容器适配器

1、引言 1.1、容器适配器的概念与应用 容器适配器&#xff08;Container Adapters&#xff09;是 C 标准库提供的一种特殊容器&#xff0c;它不是一种独立的容器&#xff0c;而是对其他标准容器的封装&#xff0c;用来实现特定的数据结构如栈&#xff08;stack&#xff09;和…

【信创】麒麟KOS上安装使用网络抓包工具Wireshark

原文链接&#xff1a;【信创】麒麟KOS上安装使用网络抓包工具Wireshark Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于如何在麒麟桌面操作系统上安装和使用Wireshark的文章。Wireshark是一款强大的网络协议分析工具&#xff0c;广泛应用于网络故障排查、网络流…

Makefile学习总结

Makefile学习总结 目录 Makefile学习总结1. Makefile介绍2. Makefile规则3. Makefile文件里的赋值方法4. Makefile常用函数4.1 字符串替换和分析函数4.2 文件名函数4.3 其他函数 5. Makefile使用示例6、多级目录通用Makefile Demo6.1 一般通用Makefile的设计思想6.2 Demo分析 参…