天天看点

js + leetcode刷题:No.23. 合并K个排序链表

合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。

示例:

输入:

[

1->4->5,

1->3->4,

2->6

]

输出: 1->1->2->3->4->4->5->6

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode[]} lists
 * @return {ListNode}
 */
var mergeKLists = function(lists) {
    var len = lists.length,res;
    switch(len) {
        case 0: return null;
            break;
        case 1: return lists[0];
            break;
        default: 
            for(var i=0,len=lists.length; i<len; i++){
                res = lists[i];
                lists[i+1] = mergeConcactLists(lists[i], lists[i+1]);   
            }
            return res;
            break;
    }
};

var mergeConcactLists = function(l1, l2){
    if(l1 == null){
        return l2;
    }
    if(l2 == null){
        return l1;
    }
    if(l1.val < l2.val){
        l1.next = mergeConcactLists(l1.next, l2);
        return l1;
    }else{
        l2.next = mergeConcactLists(l1, l2.next);
        return l2;
    }
}