两两合并升级版

合并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);
    }
}
全部评论

相关推荐

头像 会员标识
01-16 12:52
牛客运营
神哥不得了:你好,你是我见过最美的美国女生,请问你有PDD嘛😬
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务