Google/LintCode:M-合并k个排序链表

来源:互联网 发布:java字符串数组 \0 编辑:程序博客网 时间:2024/06/05 04:56

题目


题目来源:Link


合并k个排序链表,并且返回合并后的排序链表。尝试分析和描述其复杂度。

样例

给出3个排序链表[2->4->null,null,-1->null],返回 -1->2->4->null


代码


/** * Definition for ListNode. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int val) { *         this.val = val; *         this.next = null; *     } * } */ public class Solution {    /**     * @param lists: a list of ListNode     * @return: The head of one sorted list.     */    public ListNode mergeKLists(List<ListNode> lists) {          // write your code here        if(lists==null || lists.size()==0) return null;        //if(lists.size()==1) return lists.get(0);                int n=lists.size();        ListNode pre = lists.get(0);        for(int i=1; i<n; i++){            ListNode cur = lists.get(i);            pre = merge(pre,cur);        }                return pre;    }    ListNode merge(ListNode a, ListNode b){        ListNode at = a;        ListNode bt = b;        if(a==null) return b;        if(b==null) return a;        while(at!=null && bt!=null){//之前写成||            ListNode pre=null;            while(at!=null && at.val<=bt.val){                pre=at;                at=at.next;            }            if(pre==null){                while(bt!=null && bt.val<=at.val){//之前遗漏了“=”情况,导致pre可能为空                    pre=bt;                    bt=bt.next;                }                pre.next=at;            }else{                pre.next=bt;            }        }        if(a.val>b.val)            return b;        else            return a;    }}


样例

给出3个排序链表[2->4->null,null,-1->null],返回 -1->2->4->null

原创粉丝点击