题解 | #合并k个已排序的链表#
合并k个已排序的链表
https://www.nowcoder.com/practice/65cfde9e5b9b4cf2b6bafa5f3ef33fa6
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
#include <cstddef>
#include <queue>
class Solution {
public:
ListNode *mergeKLists(vector<ListNode *> &lists) {
if (lists.empty()) return NULL;
if (lists.front() == lists.back()) return lists.back();
ListNode* first = lists.back();
lists.pop_back();
ListNode* second = lists.back();
lists.pop_back();
queue<ListNode*> merge;
while(first !=NULL && second != NULL){
if (first->val > second->val){
merge.push(second);
second = second->next;
}else{
merge.push(first);
first = first->next;
}
}
while(first != NULL){
merge.push(first);
first = first->next;
}
while(second != NULL){
merge.push(second);
second = second->next;
}
ListNode* start = merge.front();
ListNode* index = start;
merge.pop();
while(!merge.empty()){
index->next = merge.front();
index = index->next;
merge.pop();
}
index->next = NULL;
lists.push_back(start);
return mergeKLists(lists);
}
};
/*
1)当lists中没有列表时,直接返还NULL(我一开始没考虑这个,w了一个点)
2)当lists中只有一个列表时,这个列表就是我们需要的列表
3)当lists中有多个列表时,取出两个合并并放回lists,重复2)3)
*/
#23届找工作求助阵地#
传音控股晋升空间 52人发布