Merge one by one
Time O(N · k) Space O(1)Merge list 1 with list 2, the result with list 3, and so on.
class Solution {
public ListNode mergeKLists(ListNode[] lists) {
ListNode result = null;
for (ListNode l : lists) result = merge(result, l);
return result;
}
private ListNode merge(ListNode a, ListNode b) {
ListNode dummy = new ListNode(0), t = dummy;
while (a != null && b != null) {
if (a.val <= b.val) { t.next = a; a = a.next; } else { t.next = b; b = b.next; }
t = t.next;
}
t.next = a != null ? a : b;
return dummy.next;
}
}Verdict: Early nodes get re-scanned in every round: slow for large k.