23. 合并K个升序链表 计数排序

题目分析

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

猜你喜欢

转载自blog.csdn.net/mistakk/article/details/109264772