先将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;
}
};