(python刷题)leetcode 第23题:合并K个排序链表

题目描述
在这里插入图片描述

解题思路
使用分治法进行解题。将所有链表进行两两分组,然后依次进行两两合并即可。

复杂度分析:
时间复杂度为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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章