先将k个有序链表的结点全部保存在vector中,注意在存结点的过程中保证每个节点的后继为空,使其称为独立的单独结点;然后自定义排序lambda对vector中的元素排序,最后将这些元素建成一个链表。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode *mergeKLists(vector<ListNode *> &lists) {
        auto cmp=[](ListNode* node1,ListNode* node2){
            return node1->val <= node2->val;
        };
        vector<ListNode* > vec{};
        for(auto& sub_list : lists){
            while(sub_list!=nullptr){
                auto cur=sub_list;
                sub_list=sub_list->next;
                cur->next=nullptr;
                vec.push_back(cur);
            }
        }
        sort(vec.begin(),vec.end(),cmp);
        ListNode* dummy_head=new ListNode{INT_MAX};
        ListNode* cur=dummy_head;
        for(auto& node:vec){
            cur->next=node;
            cur=node;
        }
        return dummy_head->next;
    }
};