0023: Merge k Sorted Lists

Problem Statement

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 linked 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.

Code Solution

import heapq

class CustomNode:
    def __init__(self, node):
        self.node = node
    
    def __lt__(self, other):
        return self.node.val < other.node.val

class Solution:
    def mergeKLists(self, lists):
	    
        hq = []
        for l in lists:
            if not l: continue
            heapq.heappush(hq, CustomNode(l))
        
        dummy = temp = ListNode(0)
        
        while hq:
            curr_node = heapq.heappop(hq)
            temp.next = ListNode(curr_node.node.val)
            temp = temp.next
            next_node = curr_node.node.next
            if next_node:
                heapq.heappush(hq, CustomNode(next_node))
        
        return dummy.next