Leetcode做题日记:23. 合并K个排序链表(PYTHON)

合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例:
输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6

        b=[]
        ss=ListNode(0)
        LL=ss
        for i in lists:
            a=ListNode(0)
            a.next=i
            a=a.next #指向当前输入的第一个值
            while a !=None:
                b.append(a.val) 
                a=a.next #操作完之后记得更新当前指向节点的位置
        b.sort() #排序
        for i in b: #建立新的链表
            '''
            ss=ss.next
            bb=ListNode(i)
            ss=bb #错在:ss时一个链表,不可能赋值节点
            '''
#上面这里使用链表方式错误,下面的这三行才是正确的     
            bb=ListNode(i)
            ss.next=bb
            ss=ss.next #指向当前bb这个节点
        return LL.next    


#我直接把所有链表的所有值加入到一个列表中,直接排序,最后把排序的列表依次输入到新的链表中
#竟然只要76ms,特别注意链表的赋值与最后返回的是什么

#下面是我第一次的代码,我的想法是利用之前对两个链表的排序代码,对lists重所有链表执行
#这个操作,代码正确,但是最后超时了。复杂度有点高?
       def HB(l1,l2):
            L1=ListNode(0)
            L1.next=l1
            L2=ListNode(0)
            L2.next=l2
            l3=ListNode(0)
            LL=l3
            s1=L1
            s2=L2
        
            if L1.next == None:
                return l2
            if L2.next == None:
                return l1
            s1=s1.next
            s2=s2.next 
            while s1 != None or s2 !=None:
                if s1==None:
                    l3.next=s2
                    break
                if s2==None:
                    l3.next=s1
                    break
                if s1.val <=s2.val:
                    L4=ListNode(s1.val)
                    l3.next=L4
                    l3=l3.next
                    s1=s1.next
                    continue            
                if s1.val >s2.val:
                    L4=ListNode(s2.val)
                    l3.next=L4
                    l3=l3.next
                    s2=s2.next
            return LL.next
  
  #上面的是之前的代码
        L=len(lists)
        if L==1:
            return lists[0]
        if L==0:
            return []
        ss=HB(lists[0],lists[1])
        for i in lists[2:]:
            ss=HB(ss,i)
        return ss           

猜你喜欢

转载自blog.csdn.net/weixin_44033136/article/details/85337479