# 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:
return self.partition(lists,0,len(lists)-1)
def partition(self,lists: List[ListNode],start:int,end:int)->ListNode:
if(start==end): return lists[start]
if(start<end):
mid=(start+end)//2
l1=self.partition(lists,start,mid)
l2=self.partition(lists,mid+1,end)
return self.merge(l1,l2)
else:
return None
def merge(self,l1:ListNode,l2:ListNode )->ListNode:
if(not l1):return l2
if(not l2):return l1
if(l1.val<l2.val):
l1.next=self.merge(l1.next,l2)
return l1
else:
l2.next=self.merge(l1,l2.next)
return l2
使用分治法,自底向上两两合并成有序链表