c++如何合并K个排序链表
这篇“c++如何合并K个排序链表”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“c++如何合并K个排序链表”文章吧。
合并k个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例:
输入:[1->4->5,1->3->4,2->6]输出:1->1->2->3->4->4->5->6
#Definitionforsingly-linkedlist.#classListNode(object):#def__init__(self,x):#self.val=x#self.next=NoneclassSolution(object):defmergeKLists(self,lists):""":typelists:List[ListNode]:rtype:ListNode"""#合成一个大的listlist然后排序lists=[xforxinlistsifx]ifnotlistsorall([notxforxinlists]):returnhead=lists.pop()curr=headwhilecurr.next:curr=curr.nextwhilelists:tmp=lists.pop()curr.next=tmpwhiletmp.next:tmp=tmp.nextcurr=tmpifnotheadornothead.next:returnheadreturnself.mergeSort(head)defmergeSort(self,head):ifnothead.next:returnheadpre,slow,fast=None,head,headwhilefastandfast.next:prev,slow,fast=slow,slow.next,fast.next.nextprev.next=Noneleft=self.mergeSort(head)right=self.mergeSort(slow)returnself.merge(left,right)defmerge(self,left,right):ifnotleft:returnrightifnotright:returnleftifleft.val<right.val:res=leftres.next=self.merge(left.next,right)else:res=rightres.next=self.merge(left,right.next)returnres
以上就是关于“c++如何合并K个排序链表”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。