23. Merge k Sorted Lists 发表于 2021-12-19 Divide and Conquer12345678910111213141516171819202122232425262728293031323334353637383940class Solution { public ListNode mergeTwoLists(ListNode list1, ListNode list2) { ListNode dummyHead = new ListNode(); ListNode curr = dummyHead; while (list1 != null && list2 != null) { if (list1.val <= list2.val) { curr.next = list1; list1 = list1.next; } else { curr.next = list2; list2 = list2.next; } curr = curr.next; } curr.next = list1 != null ? list1 : list2; return dummyHead.next; } public ListNode mergeKLists(ListNode[] lists) { return mergeKLists(lists, 0, lists.length - 1); } private ListNode mergeKLists(ListNode[] lists, int left, int right) { if (left > right) { return null; } if (left == right) { return lists[left]; } int mid = (left + right) >>> 1; ListNode k1 = mergeKLists(lists, left, mid); ListNode k2 = mergeKLists(lists, mid + 1, right); return mergeTwoLists(k1, k2); }} Priority Queue123456789101112131415161718192021222324class Solution { public ListNode mergeKLists(ListNode[] lists) { ListNode dummyHead = new ListNode(); ListNode curr = dummyHead; Queue<ListNode> minHeap = new PriorityQueue<>(Comparator.comparingInt(o -> o.val)); for (ListNode head : lists) { if (head != null) { minHeap.offer(head); } } while (!minHeap.isEmpty()) { ListNode minNode = minHeap.poll(); curr.next = minNode; curr = curr.next; if (minNode.next != null) { minHeap.offer(minNode.next); } } return dummyHead.next; }} Reference23. Merge k Sorted Lists