题目
这里利用小顶堆的来实现
把这元素依次放到堆中,
然后依次出堆,每次出堆的时间是O(logn)n为堆的高度
每次出堆都是堆中最小的元素,同时也是链表中的最小元素
package 剑指offer;
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Queue;
public class t78合并排序链表 {
class Mycompartor implements Comparator<ListNode>{
//这里的-符号就是 比较的意思 意思就是会把 n1.val 与n2.val相比较
@Override
public int compare(ListNode n1, ListNode n2) {
return n1.val-n2.val;
}
public ListNode mergeLists(ListNode[] lists){
//新建一个堆对象
Queue<ListNode> heap =new PriorityQueue<ListNode>();
//开始遍历
for(ListNode listnode:lists){
while (listnode!=null){
heap.offer(listnode);
listnode=listnode.next;
}
}
//这是所有节点都在堆里面了
ListNode dummy =new ListNode(-1);
ListNode cur=dummy;
while(!heap.isEmpty()){
ListNode listNode = heap.poll();
cur.next=listNode;
cur=listNode;
if(heap.isEmpty()){
cur.next=null;
}
}
return dummy.next;
}
}
}