/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public List<Integer> list = new ArrayList<Integer>();
public ListNode sortList(ListNode head) {
if(head == null) return null;
list.add(head.val);
while (head.next != null) {
head = head.next;
list.add(head.val);
}
int[] a = new int[list.size()];
int[] b = new int[list.size()];
int n = list.size();
for (int i = 0; i < n; i++) {
a[i] = list.get(i);
}
list = null;
sort(a,0, n-1,b);
ListNode node = new ListNode();
ListNode res = node;
for (int i = 0; i < n; i++) {
node.val = a[i];
if (i == n - 1) {
break;
} else {
node.next = new ListNode();
node = node.next;
}
}
return res;
}
public void sort(int[] a,int l, int r,int[] b) {
if (l == r) return;
int mid = (l + r) >> 1;
sort(a,l, mid,b);
sort(a,mid + 1, r,b);
int i = l;
int j = mid + 1;
int tmp = l;
while (i <= mid && j <= r) {
if (a[i] < a[j]) {
b[tmp++] = a[i++];
} else {
b[tmp++] = a[j++];
}
}
while (i <= mid) {
b[tmp++] = a[i++];
}
while (j <= r) {
b[tmp++] = a[j++];
}
for (int k = l; k <=r; k++) {
a[k] = b[k];
}
}
}
148. 排序链表
最新推荐文章于 2024-07-19 23:59:56 发布