前言

反转链表可以先看我这篇文章:

Leetcode 206题 反转链表(Reverse Linked List)Java语言求解

题目链接

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;

我们接下来要做的是,先把Mprenext域 指向NodeM节点的后一个节点;

再把 NodeM所在节点移动到 NodeN 所在节点之后,使得 NodeNnext域指向 NodeM所在节点,NodeM所在节点 next域 指向 NodeNnext域所指节点;

然后让 NodeM指向Mprenext域 指向的节点;

然后再重复上面的步骤;



这是 NodeMNodeN 相遇,反转完成。

代码

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

ListNode pre = new ListNode(0);

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

ListNode Mpre = pre;

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

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;

完整代码如下:

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;
}
}

欢迎关注

欢迎大家的关注

扫描下方的二维码关注我的微信公众号:code随笔

Leetcode 92题反转链表 II(Reverse Linked List II) Java语言求解的更多相关文章

  1. Leetcode 206题 反转链表(Reverse Linked List)Java语言求解

    题目描述: 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 迭代解 ...

  2. Leetcode 20题 有效的括号(Valid Parentheses) Java语言求解

    题目描述: 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 注意空 ...

  3. LeetCode 92. 反转链表 II(Reverse Linked List II)

    92. 反转链表 II 92. Reverse Linked List II 题目描述 反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明: 1 ≤ m ≤ n ≤ 链表长度. LeetC ...

  4. LeetCode算法题-Delete Node in a Linked List(Java实现)

    这是悦乐书的第197次更新,第204篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第60题(顺位题号是235).编写一个函数来删除单链表中的节点(尾部除外),只允许访问该 ...

  5. [Swift]LeetCode92. 反转链表 II | Reverse Linked List II

    Reverse a linked list from position m to n. Do it in one-pass. Note: 1 ≤ m ≤ n ≤ length of list. Exa ...

  6. LeetCode - 92、反转链表 II

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

  7. 【链表】 Reverse Linked List II

    题目: Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Given 1- ...

  8. lc面试准备:Reverse Linked List II

    1 题目 Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Given 1 ...

  9. LeetCode之“链表”:Reverse Linked List && Reverse Linked List II

    1. Reverse Linked List 题目链接 题目要求: Reverse a singly linked list. Hint: A linked list can be reversed ...

  10. 【python】Leetcode每日一题-反转链表 II

    [python]Leetcode每日一题-反转链表 II [题目描述] 给你单链表的头节点 head 和两个整数 left 和 right ,其中 left <= right .请你反转从位置 ...

随机推荐

  1. PPT 动画-多层旋转(圆角三角形)

    多层旋转动画 插入若干个三解形 然后将页面切换成[平滑](Office 2019~ 365 才有这功能,或者 iSlide 平滑过渡)

  2. GitLab--简单使用

    1 创建项目组 项目组说明 Private 私有 只有所有者 组内成员或已分配的用户有查看权限(同GitHub收费版的私有仓库) Internal 内部 拥有GitLab账号的成员可以查看 无账号用户 ...

  3. 网传的Spring大漏洞

    昨天凌晨发了篇关于Spring大漏洞的推文,白天就有不少小伙伴问文章怎么删了. 主要是因为收到朋友提醒说可能发这个会违规(原因可参考:阿里云因发现Log4j2核弹级漏洞但未及时上报,被工信部处罚),所 ...

  4. Woodpecker CI 设计分析|一个 Go 编写的开源持续集成引擎

    一.前言 大家好,这里是白泽.随着 Go 语言在云原生领域大放异彩,开发者逐渐将目光转移到了这门语言上,而容器则是云原生时代最核心的载体. <Woodpecker CI 设计分析>系列文章 ...

  5. 第三届云原生编程挑战赛正式启动,Serverless 赛道邀你参加!

    据<云原生开发现状报告>显示,全球云原生开发人员达 680 万,与 2020 年 5 月报告的云原生开发者数量 470 万相比,全球云原生开发人员数量正极速增长,越来越多开发者加入到云原生 ...

  6. 从“预见”到“遇见”SAE 引领应用步入 Serverless 全托管新时代

    --黛忻 阿里云SAE产品经理 近年来,企业的数字化随着互联网的普及发展越来越快,技术架构也是几经更迭,尤其是在线业务部分.从最初的单体应用到分布式应用再到云原生应用,出现了进阶式的变化. 带来便利的 ...

  7. freeswitch带媒体压力测试方案

    概述 原本的计划是使用sipp完成带媒体压力测试,但是实际测试过程中发现sipp的媒体处理功能有问题(也有可能是我使用的姿势不对). sipp在带媒体的情况下(600路并发开始),出现大量的不响应和响 ...

  8. 解决JedisNoReachableClusterNodeException,No reachable node in cluster报错

    通过jedis连接redis集群时报如下的错误:JedisNoReachableClusterNodeException,No reachable node in cluster 本机连接均正常:   ...

  9. Rocketmq学习3——消息发送原理源码浅析

    一丶概述 RocketMQ 消息发送的原理流程可以分为以下几个步骤: 1. 创建生产者 在发送消息前,客户端首先需要创建一个消息生产者(Producer)实例,并设置必要的配置参数,如NameServ ...

  10. 【ArgParse】一个开源的入参解析库

    项目地址:argtable3 本地验证: 编译构建 新增验证 // examples/skull.c #include "argtable3.h" int main(int arg ...