Problem Link

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].length will not exceed 104.

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