# 最直白的注释 没有之一
首先这个题目 和上一题其实很类似 。不同的是,该题没有规定需排序数组的个数,遍历寻找每个ListNode里面的最小值,之后再添加对Head.next进行选择的话 时间复杂度O(n^2)当数据很大时时间会超时
    暴力解法 超时了
        ListNode  head = new ListNode(-1001);
        ListNode cur = head;
        while(!lists.isEmpty()){
            int min=0,minValue=1001;
            for(int i=0;i<lists.size();i++){
            // ListNode 原始为null的情况
                if(lists.get(i)==null){
                    lists.remove(i);
                    continue;
                }//不断选择每个ListNode第一个里面的最小值
                if(lists.get(i).val<minValue){
                    min  =i;
                    minValue = lists.get(i).val;
                }
            }//使用cur来对其进行排序
            cur.next = lists.get(min);
            cur = cur.next;
            //取到值的List 跳到下一个节点去 这里选择先删后添加新的
            ListNode tmp = lists.get(min);
            tmp = tmp.next;
            lists.remove(min);
            if(tmp!=null)
                lists.add(tmp); 
        }
        return head.next;        
### 归并排序
题目要求时间复杂度O(nlogn) 应该想到二分的思路。
 public ListNode mergeKLists(ArrayList<ListNode> lists) {
    
        //使用归并排序 说白就是把其分为一半一半来排序 再合成为大的
        if(lists.size()==1)
            return lists.get(0);
        return mergeList(lists,0,lists.size()-1);
        
    }
    ListNode mergeList(ArrayList<ListNode> lists,int left,int right){
        if(left==right)
            return lists.get(left);
        if(left>right)
            return null;
        int mid = left + (right-left)/2;
        //[left,mid]
        ListNode l = mergeList(lists,left,mid);
        //[mid+1.right]
        ListNode r = mergeList(lists,mid+1,right);
        return merge(l,r);
        }
    ListNode merge(ListNode l,ListNode r){
        //这里就是上一题的合并两个排序链表
        //使用递归方便一点(也可以构造链表法)
        if(l==null) return r;
        if(r==null) return l;
        if(l.val<r.val){
            l.next = merge(l.next,r);
            return l;
        }else{
            r.next = merge(l,r.next);
            return r;
        }
    }