제목 설명
\ k k 정렬 된 연결 목록을 병합하고 정렬 된 연결 목록으로 반환합니다. 복잡성을 분석하고 설명합니다.
예 1
시작하다
[{1,2,3}, {4,5,6,7}]
반환 값
{1,2,3,4,5,6,7}
코드 구현 :
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
import java.util.*;
public class Solution {
public ListNode mergeKLists(ArrayList<ListNode> lists) {
//优先字符,从小到大
//重写比较器
//特殊样例:输入:[[-2,-1,-1,-1],[]]
if(lists.size() == 0) {
return null;
}
Queue<ListNode> queue = new PriorityQueue( new Comparator<ListNode>() {
public int compare(ListNode listNode1, ListNode listNode2) {
return listNode1.val - listNode2.val;///重载优先级使其变为小根堆
}
});
for(ListNode listNode : lists) {
if(listNode == null) {
continue;
}
queue.add(listNode);
}
ListNode head = new ListNode(0);
ListNode tmp = head;
while(queue.size() > 0) {
tmp.next = queue.poll();
tmp = tmp.next;
if(tmp.next != null) {
queue.add(tmp.next);
}
}
return head.next;
}
}