23. Merge k Sorted Lists
Hard
You are given an array of k
linked-lists lists
, each linked-list is sorted in ascending order.
Merge all the linked-lists into one sorted linked-list and return it.
Example 1:
Input: lists = [[1,4,5],[1,3,4],[2,6]]
Output: [1,1,2,3,4,4,5,6]
Explanation: The linked-lists are:
[
1->4->5,
1->3->4,
2->6
]
merging them into one sorted list:
1->1->2->3->4->4->5->6
Example 2:
Input: lists = []
Output: []
Example 3:
Input: lists = [[]]
Output: []
Constraints:
k == lists.length
0 <= k <= 10^4
0 <= lists[i].length <= 500
-10^4 <= lists[i][j] <= 10^4
lists[i]
is sorted in ascending order.The sum of
lists[i].length
won't exceed10^4
.
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
import heapq
class Solution:
def mergeKLists(self, lists: List[Optional[ListNode]]) -> Optional[ListNode]:
min_heap = []
count = 0 # This is not useful(only used for comparison) but create so that we don't get error in heap
# Push First K elements each from one of the K list
for index, node in enumerate(lists):
if node:
heapq.heappush(min_heap, (node.val, count, node))
count+=1
head = dummy = ListNode()
# Pick min from heap and put the next element of that list to which this element belongs
while min_heap:
val, _ ,node = heapq.heappop(min_heap)
if node:
head.next = node
head = node
node = node.next
if node:
heapq.heappush(min_heap, (node.val, count, node))
count+=1
return dummy.next
Last updated