题目描述:
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例:
输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6
解题思路:
思路借鉴:https://leetcode-cn.com/problems/merge-k-sorted-lists/solution/leetcode-23-he-bing-kge-pai-xu-lian-biao-by-powcai/
# 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
n = len(lists)
output = self.merge(lists, 0, n-1)
return output
def merge(self, lists: List[ListNode], head: int, tail: int) -> ListNode:
if head == tail:
return lists[head]
mid = head + (tail - head) // 2
first_list = self.merge(lists, head, mid)
second_list = self.merge(lists, mid + 1, tail)
return self.merge_two_list(first_list, second_list)
def merge_two_list(self, first_list, second_list):
if not first_list:
return second_list
if not second_list:
return first_list
if first_list.val <= second_list.val:
first_list.next = self.merge_two_list(first_list.next, second_list)
return first_list
else:
second_list.next = self.merge_two_list(first_list, second_list.next)
return second_list