【python-leetcode23-多路归并】合并k个排序链表

时间:2022-07-23
本文章向大家介绍【python-leetcode23-多路归并】合并k个排序链表,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。

示例:

输入: [ 1->4->5, 1->3->4, 2->6 ] 输出: 1->1->2->3->4->4->5->6

思路:每次两两合并,然后将合并的结果重新添加到列表中,直到只剩下一个链表。

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def mergeKLists(self, lists: List[ListNode]) -> ListNode:
        while len(lists)>1:
            a=lists.pop() if len(lists)>0 else None
            b=lists.pop() if len(lists)>0 else None
            lists.insert(0,self.mergeTwoLists(a,b))
        return None if len(lists)<1 else lists[0]
    def mergeTwoLists(self,l1,l2):
        newHead=ListNode(0)
        t=newHead
        while l1 and l2:
            if l1.val<=l2.val:
                t.next=ListNode(l1.val)
                l1=l1.next
            else:
                t.next=ListNode(l2.val)
                l2=l2.next
            t=t.next
        if l1:
            t.next=l1
        if l2:
            t.next=l2
        return newHead.next