两两合并升级版
合并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); } }