33. k 개의 정렬 된 연결 목록 병합

 

제목 설명

\ 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;

    }
}

 

추천

출처blog.csdn.net/xiao__jia__jia/article/details/113470180