合并 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