Divide & Conquer
经典题目
public ListNode mergeKLists(ListNode[] lists) {
if (lists == null || lists.length == 0) return null;
return mergeKLists(lists, 0, lists.length - 1);
}
private ListNode mergeKLists(ListNode[] lists, int left, int right) {
if (left == right) return lists[left];
int mid = left + (right - left) / 2;
ListNode a = mergeKLists(lists, left, mid);
ListNode b = mergeKLists(lists, mid + 1, right);
return merge(a, b);
}
private ListNode merge(ListNode a, ListNode b) {
if (a == null) return b;
if (b == null) return a;
ListNode dummyNode = new ListNode(0);
ListNode cur = dummyNode;
while (a != null && b != null) {
if (a.val < b.val) {
cur.next = a;
a = a.next;
} else {
cur.next = b;
b = b.next;
}
cur = cur.next;
}
if (a != null) cur.next = a;
if (b != null) cur.next = b;
return dummyNode.next;
}Last updated