思路:分治法,然后使用之前实现的合并两条有序链表的方法。
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def mergeKLists(self, lists):
"""
:type lists: List[ListNode]
:rtype: ListNode
"""
if lists == []:
return None
if len(lists) == 1:
return lists[0]
mid = len(lists)/2
return self.merge2Lists(self.mergeKLists(lists[:mid]),self.mergeKLists(lists[mid:]))
def merge2Lists(self,l1,l2):
if l1 is None:
return l2
if l2 is None:
return l1
l = ListNode(0)
head = l
while l1 is not None and l2 is not None:
if l1.val < l2.val:
l.next = l1
l = l.next
l1 = l1.next
else:
l.next = l2
l = l.next
l2 = l2.next
while l1 is not None:
l.next = l1
l = l.next
l1 = l1.next
while l2 is not None:
l.next = l2
l = l.next
l2 = l2.next
head = head.next
return head