题目
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例:
输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6
方法一
将值放在一个list中然后排序输出
# 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:
nodelist = []
for head in lists:
while head:
nodelist.append(head.val)
head = head.next
nodelist = sorted(nodelist)
head = ListNode(0)
p = head
for index in range(len(nodelist)):
head.next = ListNode(nodelist[index])
head = head.next
return p.next
方法二
分治
# 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:
if not lists:
return None
k = len(lists)
if k<2:
return lists[0]
else:
head1 = self.mergeKLists(lists[:k//2]) #分
head2 = self.mergeKLists(lists[k//2:])
return self.merge2List(head1,head2) #合
def merge2List(self,head1,head2):
if not head1:
return head2
if not head2:
return head1
if head1.val<head2.val:
res = head1
res.next = self.merge2List(head1.next,head2)
else:
res = head2
res.next = self.merge2List(head1,head2.next)
return res