Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Leetcode 92题反转链表 II(Reverse Linked List II)

Leetcode 92题反转链表 II(Reverse Linked List II)

作者头像
code随笔
发布于 2020-04-22 07:43:01
发布于 2020-04-22 07:43:01
40400
代码可运行
举报
文章被收录于专栏:code随笔的专栏code随笔的专栏
运行总次数:0
代码可运行

前言

反转链表可以先看这篇文章: LeetCode 206题 反转链表(Reverse Linked List)

题目链接

https://leetcode-cn.com/problems/reverse-linked-list-ii/

题目描述

反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。 说明: 1 ≤ m ≤ n ≤ 链表长度。 示例: 输入: 1->2->3->4->5->NULL, m = 2, n = 4 输出: 1->4->3->2->5->NULL

分析

给定初始链表为 1->2->3->4->5->NULL,如图

初始状态

我们需要找到第 m 个节点和第 n 个节点,分别记为 MNode 和 ** NNode** 同时也要记录第 m 个节点的前驱节点,记为 Mpre;

演示图1

我们接下来要做的是,先把Mprenext域 指向NodeM节点的后一个节点; 再把 NodeM所在节点移动到 NodeN 所在节点之后,使得 NodeNnext域指向 NodeM所在节点,NodeM所在节点 next域 指向 NodeNnext域所指节点; 然后让 NodeM指向Mprenext域 指向的节点;

演示图2

然后再重复上面的步骤;

这是 NodeMNodeN 相遇,反转完成。

代码

为了记录NodeM的前驱节点,我们新建一个虚拟节点,使得该节点的next域指向head;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ListNode pre = new ListNode(0);

我们并不移动pre这个节点,因为在移动的过程中会改变pre存储的地址,我们再新建一个Mpre

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ListNode Mpre = pre;

新建变量和找NodeM节点和NodeN节点的代码为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ListNode pre = new ListNode(0);
        pre.next = head;
        ListNode Mpre = pre;
        ListNode NodeM = head;
        ListNode NodeN = head;
        int mNum = 1;
        int nNum = 1;
        while(mNum < m && NodeM != null){
            Mpre = NodeM;
            NodeM = NodeM.next;
            mNum++;
        }

        while(nNum < n && NodeN != null){
            NodeN = NodeN.next;
            nNum++;
        }

反转的代码为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
while(NodeM != NodeN){
  Mpre.next = NodeM.next;
        NodeM.next = NodeN.next;
        NodeN.next = NodeM;
        NodeM = Mpre.next;
}

因为我们新建了一个虚拟节点,我们返回如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
return pre.next;

完整代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Solution {
    public ListNode reverseBetween(ListNode head, int m, int n){
        if(m==n || head == null||head.next == null){
            return head;
        }

        ListNode pre = new ListNode(0);
        pre.next = head;
        ListNode Mpre = pre;
        ListNode NodeM = head;
        ListNode NodeN = head;
        int mNum = 1;
        int nNum = 1;
        while(mNum < m && NodeM != null){
            Mpre = NodeM;
            NodeM = NodeM.next;
            mNum++;
        }

        while(nNum < n && NodeN != null){
            NodeN = NodeN.next;
            nNum++;
        }

        while(NodeM != NodeN){
            Mpre.next = NodeM.next;
            NodeM.next = NodeN.next;
            NodeN.next = NodeM;
            NodeM = Mpre.next;
        }
        return pre.next;
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 code随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Docker容器镜像仓库存储原理(前世今身)与搬运技巧
在深入学习镜像之前我们需要知道镜像是如何(炼制/搓)成的(等同于构建镜像),当然是通过我们DockerFile一条条指令为镜像生成每一层,按照执行顺序镜像文件系统复写封装从下到上;
全栈工程师修炼指南
2022/09/29
3.6K0
Docker容器镜像仓库存储原理(前世今身)与搬运技巧
n1.Docker命令参数一览表
描述:利用 docker info 命令 Docker Client && Docker Server 信息一览:
全栈工程师修炼指南
2020/10/23
2.3K0
n1.Docker命令参数一览表
【Docker】Docker常见命令汇总
命令帮助文档:Reference documentation | Docker Documentation
宝耶需努力
2022/12/13
1.1K0
Docker 进阶之镜像分层详解
1.构建测试镜像v1.0:docker build -t image_test:1.0 .
看、未来
2022/06/30
1.6K0
Docker 进阶之镜像分层详解
n1.Docker安装运行所遇异常解决
描述:默认情况下Docker的存放位置为 /var/lib/docker , 具体的位置可以通过sudo docker info | grep "Docker Root Dir"查看。
全栈工程师修炼指南
2020/10/23
4K0
n1.Docker安装运行所遇异常解决
Docker挂了,数据如何找回
很多人在初用docker的时候,很多时候都忘记或不知道docker中需要保留的数据需要挂载到宿主机文件夹到容器内部对应目录(当然除了挂载宿主机目录,还有其他解决方案,我们后面会有文章介绍)
李俊鹏
2020/06/15
3.6K0
Docker挂了,数据如何找回
好奇宝宝看 Docker 底层原理(中)
前面两篇分别探究了 docker 的底层架构和 docker 的容器隔离机制,那么本篇就来一探 docker 是如何实现多文件联合系统的!!!
看、未来
2022/05/31
5190
好奇宝宝看 Docker 底层原理(中)
Docker | 常用命令——排错很有帮助
众所周知,docker 排查问题相较而言是困难的。因此,熟知一些常用命令对我们快速的排查定位问题是非常有帮助的。下面让我们一起来学习一下吧👇 1、显示docker的系统信息 docker info [root@xiao docker]# docker info Client: Context: default Debug Mode: false Plugins: app: Docker App (Docker Inc., v0.9.1-beta3) buildx: Build wi
甜点cc
2022/11/16
4480
Docker | 常用命令——排错很有帮助
Docker常用命令,值得收藏!
分离模式:通过 -d 选项指定;容器会在任务(进程)结束时退出。 前台模式:可以将控制台连接到容器中进程的标准输入、输出、错误;通过 -t 选项可以为其分配一个伪终端;通过 -i 选项可以保持标准输入处于打开状态。
网络技术联盟站
2023/03/13
4210
Docker常用命令,值得收藏!
5分钟带你掌握Docker全部命令
用户1107783
2023/07/31
3260
5分钟带你掌握Docker全部命令
无需 Daemon 进程的容器工具:Podman
Linux 容器是由 Linux Kernel 提供的具有特定隔离的进程。Linux 容器技术能够让用户对应用及其整个运行时环境(包括全部所需文件)一起进行打包或隔离。从而让用户在不同环境,之间轻松迁移应用的同时,并保留应用的全部功能。
CS实验室
2021/03/22
1.7K0
无需 Daemon 进程的容器工具:Podman
Docker 入门——镜像
DockDocker 入门——镜像er 是一种流行的开源平台,可以让开发者和运维人员轻松地创建、部署和运行应用程序。Docker 的核心概念之一就是镜像,它是一个包含了应用程序代码、依赖库、配置文件和运行环境的可执行文件。使用 Docker 镜像,我们可以在任何支持 Docker 的机器上快速地启动一个容器,而不需要担心环境差异和兼容性问题。
奇零才子
2023/11/01
4850
Docker容器Registry私有镜像仓库安全配置与GC回收实践
描述:本来我想直接写Harbor的Docker镜像仓库搭建配置与使用,但是觉得还是应该从基础的Docker的Registry镜像讲起从安全构建到GC回收同时加深学习映像;
全栈工程师修炼指南
2022/09/29
2.4K0
Docker容器Registry私有镜像仓库安全配置与GC回收实践
零基础学Docker【2】 | 一文带你快速学习Docker常用命令
前言 本篇是零基础学Docker系列的第二篇文章,在上一篇文章中?一文带你快速了解并上手Docker已经为大家讲解了一些什么是Docker,如何安装使用Docker的内容,以及对Doc
大数据梦想家
2021/01/27
5150
零基础学Docker【2】 | 一文带你快速学习Docker常用命令
Docker如何搭建私有registry镜像仓库
说明:在docker01机器有registry镜像和docker-registry-web镜像,用搭建私有镜像仓库和web页面访问。
踏歌行
2020/10/15
3.2K0
Docker如何搭建私有registry镜像仓库
Docker Notes-storage
摘要: Docker Notes系列为学习Docker笔记,本文是Docker存储介绍
itliusir
2018/08/03
3810
Docker Notes-storage
docker总结
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Dlimeng
2023/06/30
2430
docker总结
Docker镜像管理
从docker指定的仓库下载镜像到本地 用法: docker pull 镜像名称
星哥玩云
2022/09/15
4750
【Docker】在Docker环境中安装Tomcat服务
文章目录 一、什么是Tomcat❔ 二、Docker下安装Tomcat操作演示🎨 1️⃣前期准备 2️⃣下载tomcat镜像 3️⃣启动tomcat 4️⃣测试访问报错 5️⃣修改配置参数 6️⃣重新测试访问 三、参考链接🔗 一、什么是Tomcat❔ Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java
宝耶需努力
2022/12/13
2.8K0
【Docker】在Docker环境中安装Tomcat服务
Docker(35)- docker inspect 命令详解
https://www.cnblogs.com/poloyy/category/1870863.html
小菠萝测试笔记
2020/11/23
7.2K0
Docker(35)- docker inspect 命令详解
相关推荐
Docker容器镜像仓库存储原理(前世今身)与搬运技巧
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验