题目描述
解题思路
使用分治法进行解题。将所有链表进行两两分组,然后依次进行两两合并即可。
复杂度分析:
时间复杂度为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