1.使用中间容器是绝对不会错的
相对来说使用了额外的空间 2928 ms
/**
* Definition for ListNode
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode reverseBetween(ListNode head, int m, int n) {
if (head == null) {
return head;
}
int len = getLen(head);
int[] nums = new int[len];
int index = 0;
ListNode p = head;
while (p != null) {
nums[index] = p.val;
p = p.next;
index++;
}
change(nums, m, n);
for (int i = 0; i < nums.length; i++) {
ListNode node = new ListNode(nums[i]);
if (i == 0) {
head = node;
p = head;
} else {
p.next = node;
p = p.next;
}
}
return head;
}
public void change(int[] nums, int m, int n) {
m = m - 1;
n = n - 1;
int mid = (m + n) / 2;
for (int i = 0; i <= mid; i++) {
if (m + i < n - i) {
int temp = nums[m + i];
nums[m + i] = nums[n - i];
nums[n - i] = temp;
}
}
}
public int getLen(ListNode head) {
ListNode p = head;
int counter = 0;
while (p != null) {
counter++;
p = p.next;
}
return counter;
}
}