题目描述
合并 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
博客围绕合并k个排序链表的算法题展开,给出示例输入输出。解题采用分治法,通过递归先合并两条最小链表,再将合并后的链表继续合并,如n条链表,每次合并数量减半,最终合并成一条链表,并要求分析算法复杂度。
460

被折叠的 条评论
为什么被折叠?



