茄子算法每日N题之LeetCode23.合并K个排序链表

LeetCode 23.合并K个排序链表

你们好,我是灵魂画师--茄子。技术水平通常,喜欢画画。算法

开始今天的正题。数组

23.合并K个排序链表指针

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

示例 1:排序

输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6leetcode

解法:get

1.双指针解法

思路:io

  1. 遍历数组,合并两个成新的一个链表再继续合并下一个链表
let mergeKLists = function(lists) {
    let mergeTwoLists = (l1,l2) => {
        let preHead = new ListNode(-1)
        let preNode = preHead
        while(l1 && l2){
            if(l1.val <= l2.val){
                preNode.next = l1
                l1 = l1.next
            }else{
                preNode.next = l2
                l2 = l2.next
            }
            preNode = preNode.next
        }
        preNode.next = l1 ? l1 : l2
        return preHead.next
    }
    let n = lists.length
    if(n == 0) return null
    let res = lists[0]
    for(let i = 1;i < n;i++){
        if(lists[i]){
            res = mergeTwoLists(res,lists[i])
        }
    }
    return res
};

结合个人分析你是否是对这道题有了更清晰的认识了呢?function

以上就是个人思路以及解法了,但愿你们喜欢我,我会继续努力的ヾ(◍°∇°◍)ノ゙。(点个赞把我带走吧~~)class

相关文章
相关标签/搜索