合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例:
输入: [1->4->5,1->3->4,2->6 ] 输出: 1->1->2->3->4->4->5->6
渣渣晴在认真的处理链表……然鹅……
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = Noneclass Solution:def mergeKLists(self, lists):""":type lists: List[ListNode]:rtype: ListNode"""if not lists:return Nonei=0while i in range(len(lists)):if not lists[i]:lists.pop(i)else:i+=1newhead=ListNode(0)p=newheadwhile len(lists)>0:p.next=self.findMin(lists)p=p.nextp.next=Nonereturn newhead.nextdef findMin(self,lists):minI=-1minnode=Nonefor i in range(len(lists)):if lists[i]: #该list不为空if minI==-1:minnode=lists[i]minI=ielse:if lists[i].val<minnode.val:minnode=lists[i]minI=ilists[minI]=lists[minI].nextif not lists[minI]:lists.pop(minI)return minnode
大佬们把数字提取出来,排序一下sort,再建立一个新的链表……算不算投机取巧啊……
lass Solution:def mergeKLists(self, lists):""":type lists: List[ListNode]:rtype: ListNode"""res = []for l in lists:while l is not None:res.append(l.val)l = l.nextif len(res) == 0:return []res.sort()m_val = ListNode(res[0])m_head = m_valfor i in range(1, len(res)):m_val.next = ListNode(res[i])m_val = m_val.nextm_val.next = Nonereturn m_head