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

前端之家收集整理的这篇文章主要介绍了【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()  None
            lists.insert(0,self.mergeTwoLists(a,b))
        return None if len(lists)<1  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
            :
                t.next=ListNode(l2.val)
                l2=l2.next
            t=t.next
        if l1:
            t.next=l1
         l2:
            t.next=l2
        return newHead.next

 

猜你在找的Python相关文章