题目
Sort a linked list in
O
(
n
log
n
) time using constant space complexity.
方法
public static int sum = 0;
/**
* Definition for singly-linked list.
* Sort a linked list in O(n log n) time using constant space complexity.
*/
public ListNode sortList(ListNode head) {
ListNode top = new ListNode(0);
top.next = head;
quickSort(top,null);
return top.next;
}
private void quickSort(ListNode top, ListNode end) {
ListNode priorStart = top.next;
ListNode priorEnd = top.next;
if (priorStart != end && priorStart.next != end ) {
ListNode forward = priorStart;
ListNode backward = priorStart;
ListNode help = priorStart.next;
while (help != end) {
ListNode cur = help;
help = cur.next;
if (cur.val > priorStart.val) {
backward.next = cur;
backward = cur;
} else if (cur.val < priorStart.val){
cur.next = forward;
forward = cur;
} else {
if (backward == priorEnd) {
backward.next = cur;
priorEnd.next = cur;
backward = cur;
priorEnd = cur;
} else {
ListNode temp = priorEnd.next;
cur.next = temp;
priorEnd.next = cur;
priorEnd = cur;
}
}
}
top.next = forward;
backward.next = end;
quickSort(top, priorStart);
quickSort(priorEnd, end);
}
}