题目链接在这里:合并K个升序链表
对于多个升序链表的合并,如果用C++写的话可以使用优先队列,队列里面存放的都是每一个链表的头结点。 也可以使用分治的方法来做,每次将链表两两合并,这样节约了时间。 这道题巩固了python中递归的应用。
# Definition for singly-linked list.
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next
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, low, high):
        if low == high:
            return lists[low]
        mid = (low+high) //2
        l = self.merge(lists, low, mid)
        h = self.merge(lists, mid+1, high)
        return self.mergetwo(l,h)
    def mergetwo(self,list1,list2):
        if not list1:
            return list2
        if not list2:
            return list1
        if list1.val<list2.val:
            list1.next = self.mergetwo(list1.next,list2)
            return list1
        else:
            list2.next = self.mergetwo(list1,list2.next)
            return list2
    未来是什么样,未来会发生什么,谁也不知道。  
但是我知道,  
起码从今天开始努力,  
肯定比从明天开始努力,  
要快一天实现梦想。  
千里之行,始于足下!       ——《那年那兔那些事儿》
 
                    
                     
                    
                 
                    
                 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号