leetcode 23.合并K个升序链表
1.题目要求:
2.题目示例:
3.解题技巧:
先把链表的数组的所有元素放入一个vector容器中,采用sort进行排序,然后遍历数组,最后组成一个链表。
4.题目代码:
/**
* 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<ListNode*>& lists) {
//生成数组
vector<int> sort_array;
//链表的数组元素都放入数组中
for(int i = 0;i < lists.size();i++){
ListNode* cur = lists[i];
while(cur){
sort_array.push_back(cur->val);
cur = cur->next;
}
}
//如果数组长度为零,则返回NULL
if(sort_array.size() == 0){
return NULL;
}else{
//如果数组长度不为零,则开始遍历数组创建链表
ListNode* head = NULL;
ListNode* p = NULL;
//先排序再创建
sort(sort_array.begin(),sort_array.end());
for(int i = 0;i < sort_array.size();i++){
if(head == NULL){
ListNode* newnode = new ListNode(sort_array[i]);
head = newnode;
p = head;
}else{
ListNode* newnode = new ListNode(sort_array[i]);
newnode->next = p->next;
p->next = newnode;
p = newnode;
}
}
return head;
}
}
};