目录
简介
链表
题目
直接看示例2或许理解更清楚。
题解 [1]
class Solution {
public void reorderList(ListNode head) {
List<ListNode> list = new ArrayList<>();
while(head != null){
list.add(head);
head = head.next;
}
int n = list.size();
for(int i = 0; i < n/2; i++){
list.get(i).next = list.get(n-1-i);
list.get(n-1-i).next = list.get(i+1);
}
list.get(n/2).next = null;
}
}
分治模版-归并排序 [2]:
“归并排序算法是用分治策略实现对规模为n的记录序列进行排序的算法,基本思想是:待排序记录分成大小大致相同的两个或多个子集合,分别对子集合进行排序,最终将两个排序号的子集合合并成所要求的排序好的集合。“
public class solution{
public static void result(int[] array){
int[] temp = new int[array.length];
mergeSort(array, 0, array.length-1, temp);
}
public static void merge(int[] array, int left, int mid, int right, int[] temp){
int i = 0;
int l = left;
int r = mid+1;
while(l <= mid && r <=right){
if(array[r] <= array[k]){
temp[i++] = array[l++];
}else{
temp[i++] = array[r++];
}
}
while(l <= mid){
temp[i++] = arr[l++];
}
while(r <= right){
tmp[i++] = array[r++];
}
for(int j = 0; j < l; j++){
array[left + j] = temp[j];
}
}
public static void mergeSort(int[] array,int left,int right,int[] temp){
if(left < right){
int mid = (left+right)/2;
mergeSort(array, left, mid, temp);
mergeSort(array, mid+1, right, temp);
merge(array, left, mid, right, temp);
}
}
}
推荐阅读
[1] 题解:
[2] 分治模版: