1.题目
2.题目意思
对输入链表集中的元素从小到大进行排序。
3.代码
# 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)
return self.merge(lists, 0, n-1)
# 二分
def merge(self,lists, left, right):
if left == right:
return lists[left] # 返回该链表
mid = left + (right - left) // 2 # 找出中间数mid
l1 = self.merge(lists, left, mid) # 继续找中间数,直到找到为止,返回一个链表
l2 = self.merge(lists, mid+1, right) # 继续找中间数,直到找到为止,返回一个链表
return self.mergeTwoLists(l1, l2)
# 合并
def mergeTwoLists(self,l1, l2):
if not l1:return l2 # 如果是空,返回另一个
if not l2:return l1 # l1, l2是链表头
if l1.val < l2.val:
l1.next = self.mergeTwoLists(l1.next, l2)
return l1
else:
l2.next = self.mergeTwoLists(l1, l2.next)
return l2
思路:分支~
两两合并,一个一个加入,详细看代码和注释
冲冲冲~