本人一直在努力地积累Leetcode上用Python实现的题,并且会尽力讲清每道题的原理,绝不像其他某些博客简略地带过。
如果觉得讲的清楚,欢迎关注。
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例:
输入: [ 1->4->5, 1->3->4, 2->6 ] 输出: 1->1->2->3->4->4->5->6
思路:首先我们要知道的是,这道题并没有要求我们最终实现的链表实现的节点一定是原节点的引用,于是我们可以在这里把所有链表的元素剔除出来,也即把所有链表所有元素的值都保存在一个list里,然后我们对list进行sort,最后把所有值串联起来。
时间复杂度大概是On。
代码 beat 87
class Solution:
def mergeKLists(self, lists):
"""
:type lists: List[ListNode]
:rtype: ListNode
"""
value = []
#遍历所有节点,把他们的值存在列表中
for i in lists:
t = i
while t is not None:
value.append(t.val)
t = t.next
#对列表排序
value.sort()
if len(value) == 0:
return None
head = ListNode(value[0])
j = head
#把值合并成一个列表
for i in range(1, len(value)):
j.next = ListNode(value[i])
j = j.next
return head
反思易错:这道题按这种思路写没什么易错的。