剑指 Offer II 078. 合并排序链表
Posted 不吐西瓜籽
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指 Offer II 078. 合并排序链表相关的知识,希望对你有一定的参考价值。
算法记录
LeetCode 题目:
给定一个链表数组,每个链表都已经按升序排列。
说明
一、题目
请将所有链表合并到一个升序链表中,返回合并后的链表。
二、分析
- 和合并两个有序链表类似,只是多了几条链路而已,每次需要取得链表数组的最小的头结点来放入最终的返回链表中。
- 也就是需要维护一个优先队列,使用堆来完成数据的筛选,每次取出最小的结点之后将此链表的下一个节点进行入队,直到队里为空。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode mergeKLists(ListNode[] lists) {
Queue<ListNode> queue = new PriorityQueue<>(new Comparator<ListNode>(){
public int compare(ListNode e1, ListNode e2) {
return e1.val - e2.val;
}
}) ;
for(int i = 0; i < lists.length; i++) {
if(lists[i] != null)
queue.add(lists[i]);
}
ListNode head = new ListNode();
ListNode temp = head;
while(!queue.isEmpty()) {
ListNode t = queue.poll();
temp.next = t;
temp = temp.next;
if(t.next != null) queue.add(t.next);
}
return head.next;
}
}
总结
熟悉优先队列的使用方法及常用的方法,对自定义比较器要有认识。
以上是关于剑指 Offer II 078. 合并排序链表的主要内容,如果未能解决你的问题,请参考以下文章