148. Sort List
Sort a linked list in O(n log n) time using constant space complexity.
在O(nlogn)時間內,使用常數空間對鏈表進行排序。使用歸並排序
參考:
public ListNode sortList(ListNode head) {
if (head == null || head.next == null)
return head;
// 使用快慢指針查找中間結點
ListNode fast = head;
ListNode slow = head;
while (fast.next != null) {
fast = fast.next.next;
// 讓slow少走一步,結點數目均勻
if (fast == null)
break;
slow = slow.next;
}
ListNode right = slow.next;
// 注意斷鏈
slow.next = null;
ListNode left = sortList(head);
right = sortList(right);
return mergeTwoLists(left, right);
}
// 遞歸實現鏈表排序
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode res = null;
if (l1 == null)
return l2;
if (l2 == null)
return l1;
if (l1.val <= l2.val) {
res = l1;
l1.next = mergeTwoLists(l1.next, l2);
} else {
res = l2;
l2.next = mergeTwoLists(l1, l2.next);
}
return res;
}