# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param lists ListNode类一维数组 
# @return ListNode类
#

def MergeTwoLists(pHead1: ListNode, pHead2: ListNode) -> ListNode:
    flag = ListNode(-1)
    result = None
    # 如果两个链表都是空链表。
    if (not pHead1) and (not pHead2):
        return pHead1
    # 选择小的元素放入结果链表。
    while pHead1 and pHead2:
        if pHead1.val < pHead2.val:
            if result is None:
                result = pHead1
                # 记录结果链表的头节点。
                flag.next = result
                pHead1 = pHead1.next
            else:
                result.next = pHead1
                result = result.next
                pHead1 = pHead1.next
        else:
            if result is None:
                result = pHead2
                flag.next = result
                pHead2 = pHead2.next
            else:
                result.next = pHead2
                result = result.next
                pHead2 = pHead2.next
    # 当一个链表的元素已经全部访问,直接把另一个链表的剩余部分接入到结果链表。
    if pHead1:
        # 如果有一个链表是空链表,没有经过上面的循环过程,此处也需要记录结果链表的头节点。
        if result is None:
            result = pHead1
            # 记录结果链表的头节点。
            flag.next = result
        else:
            result.next = pHead1

    else:
        if result is None:
            result = pHead2
            flag.next = result
        else:
            result.next = pHead2

    return flag.next


class Solution:
    def mergeKLists(self , lists: List[ListNode]) -> ListNode:
        # 每次合并两个链表,
        # 首先将第一个链表和第二个链表合并,然后再和第三个链表合并,直到所有链表都合并。
        if not lists:
            return None
        result_lst = lists[0]
        for lst in lists[1::]:
            result_lst = MergeTwoLists(result_lst, lst)
        
        return result_lst