# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param lists ListNode类一维数组 
# @return ListNode类
#
class Solution:      
    
    def mergeKLists(self , lists: List[ListNode]) -> ListNode:
        import heapq
        root=None
        newlist=None
        l=[(k.val,idx) for idx, k in enumerate(lists) if not k is None]
        heapq.heapify(l)
        while l:
            vt=heapq.heappop(l)
            if not newlist:
                newlist=root=ListNode(vt[0])
            else:
                newlist.next=ListNode(vt[0])
                newlist=newlist.next
            if lists[vt[1]].next:
                n=lists[vt[1]].next
                lists[vt[1]]=lists[vt[1]].next
                heapq.heappush(l,(n.val,vt[1]))
        return root