23. 合并K个升序链表

题目:https://leetcode-cn.com/problems/merge-k-sorted-lists/
给你一个链表数组,每个链表都已经按升序排列。

请你将所有链表合并到一个升序链表中,返回合并后的链表。

我的方法一:分治

将多个链表递归拆成两部分进行合并,当分拆成2或者1个时,使用https://leetcode-cn.com/problems/merge-two-sorted-lists/submissions/ 合并2个链表的方式进行合并;
直接上代码

代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* mergeKLists(vector& lists) {
        if(lists.size() == 0){
            return nullptr;
        }else if(lists.size() == 1){
            return lists[0];
        }

        int n = lists.size();

        vector l1;
        vector l2;

        for(int i = 0; ival <= cur2->val) {
                tail->next = cur1;
                cur1 = cur1->next;
            }else{
                tail->next = cur2;
                cur2 = cur2->next;
            }

            tail = tail->next;
            tail->next = nullptr;
        }

        if(cur1) {
            tail->next = cur1;
        }
        if(cur2) {
            tail->next = cur2;
        }

        return dummy.next;
    }
};

你可能感兴趣的:(23. 合并K个升序链表)