Contents
  1. 1. 题目
  2. 2. 思路
  3. 3. 解题过程

题目

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

链接:https://leetcode-cn.com/problems/reverse-linked-list-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

4个主要节点,一个m-1之前,m-n反转链表,一个n+1,

解题过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
class Solution {
public ListNode reverseBetween(ListNode head, int m, int n) {
ListNode dummy = new ListNode(-1);
dummy.next = head;
ListNode node = dummy;
if(node == null)return head;
int begin = m-1;
int end = n+1;
int index = 0;
ListNode preBegin = null;
ListNode nextEnd = null;
ListNode reverse = new ListNode(-1);
ListNode reverseLast = reverse;
while(node!= null){

if(index == begin){
preBegin = node;
}
if(index == end){
nextEnd = node;
}
if(index > begin && index < end){
ListNode newNode = new ListNode(node.val);
ListNode next = reverse.next;
reverse.next = newNode;
newNode.next = next;
if(index == m){
reverseLast = newNode;
}

}
index++;
node = node.next;
}
preBegin.next = reverse.next;
reverseLast.next = nextEnd;
return dummy.next;
}
}

执行结果
执行用时 :1 ms, 在所有 Java 提交中击败了87.25%的用户
内存消耗 :35.2 MB, 在所有 Java 提交中击败了48.42%的用户

Contents
  1. 1. 题目
  2. 2. 思路
  3. 3. 解题过程