链表内指定区间反转

news2024/11/26 9:50:12

题目:

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

数据范围: 链表长度 0< size ≤1000,0<m≤n≤size,链表中每个节点的值满足∣val∣≤1000

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

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

示例1:

输入:{1,2,3,4,5},2,4

返回值:{1,4,3,2,5}

示例2:

输入:{5},1,1

返回值:{5}

解题思路:

这个是在 《单向链表翻转》基础上增加了些难度,指定了区间内的翻转。

首先考虑链表的有效性和m、n 的值合法性;

接着,考虑m 的值,m 可能为1,则要求链表从头开始翻转;

如果m 不为0,那就是将量表分为 3 节,头、中、尾三部分。

代码:

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param head ListNode类 
 * @param m int整型 
 * @param n int整型 
 * @return ListNode类
 */
struct ListNode* reverseBetween(struct ListNode* head, int m, int n ) {
    if (m >= n || NULL == head)
        return head;

    struct ListNode* rHead = head;
    struct ListNode* rTail = NULL;
    for (int i = 1; NULL != head && i < m; ++i) { //找到rTail和需要翻转的head
        rTail = head;
        head = head->next;
    }

    if (NULL == rTail) { //第一个就需要翻转
        rHead = NULL;
        rTail = NULL;
    }

    struct ListNode* mHead = NULL;
    struct ListNode* mTail = NULL;
    struct ListNode* mp = NULL;
    for (int i = m; NULL != head && i <= n; ++i) { //进行翻转
        mp = head;
        head = head->next;
        mp->next = mHead;
        mHead = mp;
        if (NULL == mTail) {
            mTail = mp;
        }
    }

    if (NULL != rTail) { //拼接m之前的连接
        rTail->next = mHead;
    }

    if (NULL != mTail) { //拼接n后面的链表
        mTail->next = head;
    }

    if (NULL == rHead) { //如果从第一个开始翻转
        rHead = mHead;
    }

    return rHead;
}

运行结果:

 

是否还有好的方法,请大神们不吝赐教!!!

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

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

相关文章

日常开发中,提升技术的13个建议

前言 1. 打好基础,深入学习语言特性 比如&#xff0c;对于Java程序员来说,要了解Java语言的基本概念和核心特性&#xff0c;包括面向对象编程、集合框架、异常处理、多线程等等。可以通过阅读Java的官方文档、教程、参考书籍或在线资源来学习。 如果最基本的基础都不扎实&…

OOM 如何监控可视化、告警推送、服务自愈

OOM&#xff0c;out of memory&#xff0c;就是内存用完了耗尽了的意思。会触发kernel调用OOM killer杀进程来解除这种状况。 OOM分为虚拟内存OOM和物理内存OOM&#xff0c;两者是不一样的。 虚拟内存OOM发生在用户空间&#xff0c;用户空间分配的就是虚拟内存&#xff0c;不…

【裸机驱动LED】使用汇编代码驱动LED(四)—— 驱动格式开发篇

上一篇使用C语言代码来驱动LED&#xff0c;之前我们是手动设置的每一个寄存器的地址&#xff0c;但是这样的效率太低&#xff0c;而且很麻烦。此时我们注意到同属于 GPIO_CCGRx 这一类的寄存器地址&#xff0c;他们之间都相差 4 个字节。 我们要利用这一特性&#xff0c;将之前…

SciencePub学术 | 【CCF推荐】计算机决策类重点SCIEI征稿中

SciencePub学术 刊源推荐: 【CCF推荐】计算机决策类重点SCI&EI征稿中&#xff01;信息如下&#xff0c;录满为止&#xff1a; 一、期刊概况&#xff1a; CCF推荐|计算机决策类重点SCI&EI 【期刊简介】IF&#xff1a;3.5-4.0&#xff0c;JCR2区&#xff0c;中科院3/4区…

OpenCV 数据类型及赋值取值

在之前的博客 OpenCV 32F 与 8U Mat数据类型相互转换(C版) 已经提到&#xff0c;OpenCV Mat 类型及对应编号&#xff0c;如下表&#xff1a; 其中C1~C4为通道数&#xff0c;经常使用的数据类型对应如下表所示&#xff1a; 其中&#xff1a; FLT_MAX 3.402823466e38 FLT_MIN …

从亿点点失误,到一点点失误,我是如何做的【工作失误怎么办】

前言 只要我们还在做事&#xff0c;或者说还活着&#xff0c;就没有不犯错的时候。作为一名前端搬砖工&#xff0c;哪怕工作中再仔细小心&#xff0c;也免不了一些失误。 那这是不是说&#xff0c;失误很正常&#xff0c;改了就是嘛&#xff1f; 这么说好像没错。作为失误本…

[Java基础]面向对象-内存解析

因为内存解析篇幅较长&#xff0c;我们单独拿出来讲解。 我们知道&#xff0c;方法执行&#xff0c;其实就对内存的操作&#xff0c;但具体是如何进行的呢&#xff1f;下面我们以生成“圆”为例&#xff0c;从内存的角度解析程序执行过程。 /** * 圆 **/ public class Circle…

5年测试面试要20K,面试三个问题把我打发走了···

都说金三银四&#xff0c;金九银十跳槽涨薪季&#xff0c;我是着急忙慌的准备简历——5年软件测试经验&#xff0c;可独立测试大型产品项目&#xff0c;熟悉项目测试流程…薪资要求&#xff1f;5年测试经验起码能要个20K吧。 我加班肝了一页半简历&#xff0c;投出去一周&…

22种不同的社交媒体内容类型(2023年指南)

您是否觉得自己的社交媒体帖子陷入了无休止的循环&#xff1f;您是否已经无话可说并且感到厌烦了&#xff1f;看起来你没有得到任何牵引力吗&#xff1f; 别担心 — 这些感觉在营销人员和小企业主中很常见。今天&#xff0c;我们将探索社交媒体内容的世界&#xff0c;并为您提…

React-Router 5.0 制作导航栏+页面参数传递

React使用路由 使用React构建SPA应用(单页面应用)&#xff0c;要想实现页面间的跳转&#xff0c;首先想到的就是使用路由。在React中&#xff0c;常用的有两个包可以实现这个需求&#xff0c;那就是react-router和react-router-dom。本文主要针对react-router-dom进行说明。 …

麒麟V10服务器 安装samba 软件,并且实现远程连接(压缩包形式)

目录 1 安装包2 实现3 如何查看安装的sambd 的版本4 使用 1 安装包 百度网盘 链接: https://pan.baidu.com/s/1l6HDAGE4_Itj-cp7XtpUNg 提取码: 100w 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦2 实现 以下是在Linux系统中使用压缩包方式安装Samba服务的步…

angular框架-通过依赖注入方式挂载loading以实现任意地方一行代码调用全局loading

前言 本文主要阐述关于在angular项目中&#xff0c;loading的常见的使用方式&#xff0c;以及如何全局挂载loading&#xff0c;实现一行代码控制loading开&#xff0c;一行代码控制loading关闭。 正文 首先在angular中增加loading&#xff0c;主要就是组件级和全局挂载&…

Python+appium自动化测试-调用服务器接口

当前很多APP登录都需要绑定手机号&#xff0c;但当我们需要足够多的模拟新用户的注册登录时&#xff0c;无法提供大量的手机号来测试&#xff0c;所以可以让服务器给出一个清除账号的接口&#xff0c;在写自动化脚本的时候可以调用这个接口&#xff0c;保证能够使用一个账号进行…

pycharm的基本使用

废话文学 本人记录笔记始终遵循“能动手绝不动脑&#xff0c;能动脑绝不动手”的基本原则。不会的操作&#xff0c;跟着笔记干就完事了&#xff0c;还动啥脑袋&#xff1f;留着脑细胞刷抖音擦边小姐姐他不香吗&#xff1f; 什么是IDE IDE即【集成开发环境】&#xff0c;Inte…

【Algorithm】Java刷题中要熟练使用的容器Api、Stream流、Lambda表达式

Java刷题中要熟练使用的Stream流、Lambda表达式、容器Api 1.Stream流1.概述2.分类3.具体用法流的常用创建方法 2.Lambda表达式函数式接口Lambda书写语法方法引用 3.各类Api 1.Stream流 1.概述 Stream Api是「集合操作」的一种简化表达形式。其特点是惰性求值&#xff0c;流在…

maven repositories更新失败

在项目的pom文件中添加以下配置 <repositories><repository><id>alimaven</id><name>Maven Aliyun Mirror</name><url>http://maven.aliyun.com/nexus/content/repositories/central/</url><releases><enabled>tr…

视频批量剪辑软件开发源码+SaaS

工具能力 API 描述 上传素材接口 开发者可通过本接口将使用素材上传至抖音服务器。 上传临时素材接口 上传临时素材接口。 获取素材列表接口 获取素材列表接口。 删除素材接口 删除素材接口。 小程序接口能力 获取小程序接口能力。 模拟webhook事件 模拟webhook事…

基于Python的接口自动化-HTTP接口基本组成和网页构成

目录 引言 1、HTTP简介 2、HTTP原理和网页基础 2.1、 HTTP基本原理 2.2、 HTTP请求过程 2.3、 网页构成 【自动化测试工程师学习路线】 引言 在我们进行接口测试时&#xff0c;了解HTTP接口的基本组成和网页构成是非常重要的。 而Python作为一门功能强大、易学易用的编程…

亚马逊美国站 解压神器减压小玩具CPC认证

解压玩具又称减压玩具Relaxing toys&#xff0c;包括挤压、摔砸、揉捏、旋转等多种类型&#xff0c;主要供成年人使用&#xff0c;帮助释放压力。 当提到解压玩具时&#xff0c;通常指的是一类旨在缓解压力、放松心情的小型玩具。以下是几种常见的解压玩具及其简要介绍&#x…

一键开启GPT 平行时空模式

不知道大家日常使用GPT的时候&#xff0c;在一次会话中是如何完成同类任务的对话的? 简单点来说&#xff0c;假设你已经完成了角色设定&#xff0c;比如你设定GPT是一名文案编辑&#xff0c;那么接下来你会多次给它提交稿件让它进行编辑&#xff0c;那么在多次提交的时候&…