合并 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 = None
class Solution:
def mergeKLists(self, lists):
"""
:type lists: List[ListNode]
:rtype: ListNode
"""
if not lists:
return None
i=0
while i in range(len(lists)):
if not lists[i]:
lists.pop(i)
else:
i+=1
newhead=ListNode(0)
p=newhead
while len(lists)>0:
p.next=self.findMin(lists)
p=p.next
p.next=None
return newhead.next
def findMin(self,lists):
minI=-1
minnode=None
for i in range(len(lists)):
if lists[i]: #该list不为空
if minI==-1:
minnode=lists[i]
minI=i
else:
if lists[i].val<minnode.val:
minnode=lists[i]
minI=i
lists[minI]=lists[minI].next
if 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.next
if len(res) == 0:
return []
res.sort()
m_val = ListNode(res[0])
m_head = m_val
for i in range(1, len(res)):
m_val.next = ListNode(res[i])
m_val = m_val.next
m_val.next = None
return m_head