题目描述
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例:
输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6
解题思路、
- 采用分治法
- 用递归将两条最小的链表合并,再将合并的链表再合并,层层递进
- 例:n 条链表,第一次合并完剩 n/2 , 再合并剩 n/4 ,······最后合并成一条链表
代码
# 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 len(lists) == 0:
return None
if len(lists) == 1:
return lists[0]
mid = len(lists)//2
ls1 = lists[:mid]
ls2 = lists[mid:]
return self.mergeTwoList(self.mergeKLists(ls1), self.mergeKLists(ls2))
def mergeTwoList(self, l1, l2):
if l1 == None:
return l2
if l2 == None:
return l1
head = ListNode(None)
if l1.val <= l2.val:
head = l1
head.next = self.mergeTwoList(l1.next, l2)
else:
head = l2
head.next = self.mergeTwoList(l1, l2.next)
return head