題目描述
解題思路
使用分治法進行解題。將所有鏈表進行兩兩分組,然後依次進行兩兩合併即可。
複雜度分析:
時間複雜度爲Nlogk,其中N爲所有鏈表的節點總數,k的鏈表數
空間複雜度爲o(1),每次合併兩個鏈表時只需要創建兩個指針即可。
python代碼
# 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
"""
amount = len(lists)
if amount == 0:
return lists
interval = 1
while interval < amount:
for i in range(0, amount - interval, interval * 2):
lists[i] = self.merge2Lists(lists[i], lists[i + interval])
interval *= 2
return lists[0]
def merge2Lists(self, l1, l2):
newhead = p = ListNode(0)
while l1 and l2:
if l1.val <= l2.val:
p.next = l1
l1 = l1.next
else:
p.next = l2
l2 = l2.next
p = p.next
if l1:
p.next = l1
else:
p.next = l2
return newhead.next