在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。
public ListNode quickSortList(ListNode head) {
if (head == null) return null;
ListNode pivot = head;
ListNode left = null, right = null;
ListNode cur = head.next;
while(cur != null) {
ListNode n = cur.next;
if (cur.val<head.val) {
cur.next = left;
left = cur;
} else {
cur.next = right;
right = cur;
}
cur = n;
}
pivot.next = quickSortList(right);
ListNode res = quickSortList(left);
if (res == null) {
return pivot;
} else {
cur = res;
while(cur.next !=null) cur = cur.next;
cur.next = pivot;
return res;
}
}