原题目
相对来说使用了额外的空间 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; } }