两两合并升级版
合并k个已排序的链表
http://www.nowcoder.com/questionTerminal/65cfde9e5b9b4cf2b6bafa5f3ef33fa6
想出来一个比较简单的方法,先取出Arralist前两个表头,然后将他们从Arraylist中删除,合并两个表头,将合并好的列表表头置于列表ArrayList尾部,重复操作,直到这个ArrayList只有一个数为止。
import java.util.*;
public class Solution {
public ListNode mergeKLists(ArrayList<ListNode> lists) {
if(lists.size()==0)//判断是否为0
return null;
while(lists.size()>1){
//2个2个一组合并,取出来表头就删除,将合并好的列表表头再
//置于lists尾部,重复操作,最后只剩下一个,就是所得结果
ListNode p1 = lists.get(0);
ListNode p2 = lists.get(1);//取出前两个表头
lists.remove(p1);
lists.remove(p2);//将他们从lists中删除
ListNode head = new ListNode(0);
ListNode temp = head;
while(p1!=null&&p2!=null){//常规两个列表的合并
if(p1.val<=p2.val){
temp.next = new ListNode(p1.val);
p1 = p1.next;
}
else{
temp.next = new ListNode(p2.val);
p2 = p2.next;
}
temp = temp.next;
}
if(p1!=null)
temp.next = p1;
if(p2!=null)
temp.next = p2;
lists.add(head.next);//将合并好的列表置于尾部
}
return lists.get(0);
}
}
查看17道真题和解析