Leetcode 92题反转链表 II(Reverse Linked List II) Java语言求解
前言
反转链表可以先看我这篇文章:
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;

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

然后再重复上面的步骤;

这是 NodeM 和 NodeN 相遇,反转完成。
代码
为了记录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语言求解的更多相关文章
- Leetcode 206题 反转链表(Reverse Linked List)Java语言求解
题目描述: 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 迭代解 ...
- Leetcode 20题 有效的括号(Valid Parentheses) Java语言求解
题目描述: 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 注意空 ...
- LeetCode 92. 反转链表 II(Reverse Linked List II)
92. 反转链表 II 92. Reverse Linked List II 题目描述 反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明: 1 ≤ m ≤ n ≤ 链表长度. LeetC ...
- LeetCode算法题-Delete Node in a Linked List(Java实现)
这是悦乐书的第197次更新,第204篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第60题(顺位题号是235).编写一个函数来删除单链表中的节点(尾部除外),只允许访问该 ...
- [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 ...
- LeetCode - 92、反转链表 II
反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明: 1 ≤ m ≤ n ≤ 链表长度. 示例: 输入: 1->2->3->4->5->NULL, m ...
- 【链表】 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- ...
- 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 ...
- LeetCode之“链表”:Reverse Linked List && Reverse Linked List II
1. Reverse Linked List 题目链接 题目要求: Reverse a singly linked list. Hint: A linked list can be reversed ...
- 【python】Leetcode每日一题-反转链表 II
[python]Leetcode每日一题-反转链表 II [题目描述] 给你单链表的头节点 head 和两个整数 left 和 right ,其中 left <= right .请你反转从位置 ...
随机推荐
- 智定义、易调整,火山引擎DataLeap助力企业轻松实现全流程值班管理
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 近日,火山引擎大数据研发治理套件DataLeap全新上线值班管理模块,企业可通过该模块体系化智能化创建值班计 ...
- Intellij IDEA、 Pycharm 格式化换行,竖线修改 最大 分隔 线
Intellij IDEA. Pycharm 等开发工具,超过 竖线,Ctrl + L 格式化时,就会换行 格式化后,现在的显示器分辨率高,这样右边一大片空白,看起来很不舒服 File -> S ...
- Kubernetes(K8S) Node NotReady 节点资源不足 Pod无法运行
k8s 线上集群中 Node 节点状态变成 NotReady 状态,导致整个 Node 节点中容器停止服务. 一个 Node 节点中是可以运行多个 Pod 容器,每个 Pod 容器可以运行多个实例 A ...
- 使用 Kubeadm 部署 Kubernetes(K8S) 安装 -- 持久化存储(NFS网络存储)
使用 Kubeadm 部署 Kubernetes(K8S) 安装 使用 Kubeadm 部署 Kubernetes(K8S) 安装 -- Ingress-Ngnix Volume 是 Pod 中能够被 ...
- 麻省理工公开课:微积分,中文字幕视频+PDF
数学是机器学习的语言,统计是构建机器学习的基础,线性代数为机器学习提供了矩阵这一强大工具,但是要充分理解神经网络以及深度学习如何运作的,还需要学好微积分. 大家应该多少对微积分有些基础,但是很难将其与 ...
- Gcc内置原子操作__sync_系列函数
Gcc内置原子操作__sync_系列函数简述及例程 Gcc 4.1.2版本之后,对X86或X86_64支持内置原子操作.就是说,不需要引入第三方库(如pthread)的锁保护,即可对1.2.4.8字节 ...
- 即学即会 Serverless | 如何解决 Serverless 应用开发部署的难题?
本文节选自<Serverless 开发速查手册>,关注Serverless 公众回复 手册 即可获得下载链接 作者 | 江昱(阿里云 Serverless 产品经理) 破局:工具链体系匮乏 ...
- Vue3使用vue-video-player组件
1.安装依赖(亲测5.0.1版本可用,最新版本会找不到'vue-video-player/src/custom-theme.css'这个样式) yarn add vue-video-player@5 ...
- 机器学习-线性分类-softmax回归 做多分类-10
1. softmax回归 伯努利分布(0-1分布 二分类),我们采用Logistic回归(用sigmoid函数映射到 0-1之间 输出预测概率)建模. 那么我们应该如何处理多分类问题?(比如要进行邮件 ...
- xshell配置隧道转移规则
钢铁知识库,一个学习python爬虫.数据分析的知识库.人生苦短,快用python. xshell是什么 通俗点说就是一款强大ssh远程软件,可以方便运维人员对服务器进行管理操作,功能很多朋友们自行探 ...