您的位置:首页 > 其它

LintCode-----36.翻转链表 II

2017-09-01 01:54 369 查看
原题目

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: