题目分析
1 合并多个链表,就是合并多个链表的节点,需要按照大小排序,所以是一个穿着链表节点外衣的排序题目
2 根据下面的题目分析,可知数字为整形且比较小,可采取计数排序进行整合所有节点
k == lists.length
0 <= k <= 10^4
0 <= lists[i].length <= 500
-10^4 <= lists[i][j] <= 10^4
lists[i] 按 升序 排列
lists[i].length 的总和不超过 10^4
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):
def mergeKLists(self, lists):
"""
:type lists: List[ListNode]
:rtype: ListNode
"""
# 用字典来记录所有节点(因数据量不大用列表也可,但是需要保存一些空数据)
mp = {
}
minval = maxval = 0
for i in lists:
while i != None:
if i.val not in mp:
mp[i.val] = [i]
else:
mp[i.val].append(i)
minval = min(minval, i.val)
maxval = max(maxval, i.val)
i = i.next
# 尾插法生成最终结果
head = ListNode(0)
last = head
for val in range(minval, maxval + 1):
if val in mp:
for i in mp[val]:
last.next = i
last = i
last.next = None
return head.next