Leetcode 23.合并K个升序链表

思路分析:

 

  • 考虑使用二路归并排序算法
  • 涉及到合并两个有序链表的问题
# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution(object):
    def mergeTwoLists(self,lsta,lstb):      #合并两个有序链表
        if not lsta or not lstb:
            return lsta if lsta else lstb
        head=ListNode(-1)
        prev=head
        while lsta and lstb:
            if lsta.val<lstb.val:
                prev.next=lsta
                lsta=lsta.next
            else:
                prev.next=lstb
                lstb=lstb.next
            prev=prev.next
        prev.next=lsta if lsta else lstb
        return head.next
    def merge(self,lists,l,r):              #归并排序
        if (l==r):
            return lists[l]
        elif (l>r):
            return
        else:
            mid=(l+r)//2
            return self.mergeTwoLists(self.merge(lists,l,mid),self.merge(lists,mid+1,r))
    def mergeKLists(self, lists):
        """
        :type lists: List[ListNode]         每个链表存储的是其头结点
        :rtype: ListNode
        """
        return self.merge(lists,0,len(lists)-1)

 

posted @ 2022-03-10 16:44  Aria_2000  阅读(23)  评论(0)    收藏  举报