/*
要有三个指针 第一个 永远都指在m位的前一个 用于链接换过来的后位 第二个 指向被交换位置的前一个 用于链接被交换后一位
第三个 是被交换位 用于把这个位置的数字塞到 第一个指针后一位;
s 1 2
1 2 3 4 5
s 2 1
1 3 2 4 5
*/
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseBetween(ListNode head, int m, int n) {
if(head == null) return null;
ListNode result = new ListNode(0);
result.next = head;
ListNode start = result;
ListNode n1;
ListNode n2;
int i = 1;
while(start != null && i < m) {
start = start.next;//把start放到m的前一位;
i++;
}
if(i < m) return head;//如果长度小于m 返回
n1 = start.next;
n2 = n1.next;
for(i = m; i < n; i++) {
n1.next = n2.next;
n2.next = start.next;
start.next = n2;
n2 = n1.next;
}
return result.next;
}
}
Reverse Linked List II
最新推荐文章于 2021-09-03 14:18:50 发布