题目
给你一个链表数组,每个链表都已经按升序排列。
请你将所有链表合并到一个升序链表中,返回合并后的链表。
示例 1:
输入:lists = [[1,4,5],[1,3,4],[2,6]]
输出:[1,1,2,3,4,4,5,6]
解释:链表数组如下:
[
1->4->5,
1->3->4,
2->6
]
将它们合并到一个有序链表中得到。
1->1->2->3->4->4->5->6
示例 2:
输入:lists = []
输出:[]
示例 3:
输入:lists = [[]]
输出:[]
思路
用的优先队列,面试的时候也建议使用优先队列。
也可以用二分法做。
1.优先队列的初始化
ListNode[] lists中存的是每个链表的头结点,所以在优先队列中存的也是每个队列的头节点。所以优先队列的个数就是lists的长度,需要重写优先队列的比较器方法,让它升序排列。
2.将接点存入到优先队列中。
使用for循环依次将链表的头节点存入导优先队列中。
3.处理节点
用一个cur来遍历每个节点,每次用优先队列中弹出一个节点temp,这个节点就是当前队列中最小的,然后链接到cur后面,再将temp的next节点放入到优先队列中。知道优先队列为空为止。