Description
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 <= 104
- 0 <= lists[i].length <= 500
- -104 <= lists[i][j] <= 104
- lists[i]is sorted in ascending order.
- The sum of lists[i].lengthwill not exceed104.
Solution
Python3
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
 
class Node:
    def __init__(self, val, l):
        self.val = val
        self.l = l
    
    def __lt__(self, other):
        return self.val < other.val
 
class Solution:
    def mergeKLists(self, lists: List[Optional[ListNode]]) -> Optional[ListNode]:
        pq = []
 
        for l in lists:
            if l:
                heappush(pq, Node(l.val, l.next))
        
        res = curr = ListNode(-1)
 
        while pq:
            node = heappop(pq)
            val, rem = node.val, node.l
 
            curr.next = ListNode(val)
            curr = curr.next
 
            if rem:
                heappush(pq, Node(rem.val, rem.next))
 
        return res.next