题目描述
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例:
输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6
python实现
解法1(会超时)
类似于合并两个由于链表,这里同时合并多个(以前是同时比较2个,这里是同时比较多个),不过该代码会超时.
原因是,每次插入一个新的都要重新排序 sorted_index_list = sorted(range(len(index_list)), key=lambda k:
import sys
class Solution:
@staticmethod
def mergeKLists(lists):
"""
:type lists: List[ListNode]
:rtype: ListNode
"""
index_list = []
tmp=[]
for node in lists:
if node is None:
continue
else:
tmp.append(node)
index_list.append(node.val)
if len(tmp) == 0:
return None
lists=tmp
pHead = ListNode(-1)
p = pHead
#声明一个最大值节点
while True:
sorted_index_list = sorted(range(len(index_list)), key=lambda k: index_list[k])
index=sorted_index_list[0]
index_node=lists[index]
p.next = index_node
p=p.next
index_node=index_node.next
lists[index]=index_node
if index_node is None:
del index_list.[index]
num+=1
else:
index_list[index]=index_node.val
if num ==len(lists):
break
return pHead.next
解法2(呵呵,真是出乎我的意料)
呵呵!!!
将所有链表的元素都取出来放在一个list里面.然后使用sorted(list lambda x:x.val) 进行排序,然后进行拼接
然后进行重组
@staticmethod
def mergeKLists_v2(lists):
"""
:type lists: List[ListNode]
:rtype: ListNode
"""
all_node=[]
for x in lists:
while x is not None:
all_node.append(x)
x=x.next
all_node_sort=sorted(all_node,key=lambda node:node.val)
pHead=ListNode(-1)
p=pHead
for node in all_node_sort:
p.next=node
p=node
p.next=None
return pHead.next