题目地址:合并两个有序链表、
这个其实和之前那个合并k个有序链表一致,而且更加简单,可以直接移步。
仍然使用优先队列,先写比较器,new一个优先队列,把两个头放队列里, 先弹出一个,作为最后要返回的头,接着再定义一个临时变量去挨个走,先把弹出的头的下一个塞到队列里,然后循环,循环结束的条件是,队列为空,循环内就是队列弹出,然后连接到要返回的头上,再把弹出的下一个节点塞到队列,直到结束。
public static class compaper implements Comparator<ListNode> {
@Override
public int compare(ListNode o1, ListNode o2) {
return o1.val - o2.val;
}
}
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
if (list1 == null && list2 == null) {
return null;
}else if (list1 == null) {
return list2;
}else if (list2 == null) {
return list1;
}
PriorityQueue<ListNode> heap = new PriorityQueue<>(new compaper());
heap.add(list1);
heap.add(list2);
ListNode head = heap.poll();
ListNode pre = head;
if (pre.next != null ){
heap.add(pre.next);
}
while (!heap.isEmpty()) {
ListNode cur = heap.poll();
pre.next = cur;
pre = cur;
if (cur.next != null) {
heap.add(cur.next);
}
}
return head;
}