假设合并该链表:[{1,2},{1,4,5},{6}]
第一步:全部扔到vector<int>里面
第二步:调用sort()函数,自动排序
第三步:将排序后的数字拿出来形成链表
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
typedef struct ListNode {
int val;
struct ListNode* next;
}ListNode, * List;
void createList(List L,int n) {
ListNode* r = L;
for (int i = 0; i < n; i++) {
ListNode* p = new ListNode;
cin >> p->val;
p->next = NULL;
r->next = p;
r = r->next;
}
}
ListNode* mergeKLists(vector<ListNode*>& lists) {
vector<int> v;
for (int i = 0; i < lists.size(); i++) {
ListNode* temp = lists[i];
while (temp!=nullptr) {
v.push_back(temp->val);
temp = temp->next;
}
}
sort(v.begin(), v.end());
ListNode* head = new ListNode;
head->next = NULL;
ListNode* cur = head;
for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
int a = *it;
ListNode* temp = new ListNode;
temp->val = a;
cur->next = temp;
cur = cur->next;
}
cur->next = NULL;//把最后一个节点的next置空
return head->next;
}
void printList(List L) {
ListNode* p = L;
while (p) {
cout << p->val << " ";
p = p->next;
}
}
int main() {
vector<ListNode*>list;
int x;
cout << "请输入你想排序链表的个数:";
cin >> x;
for (int i = 0; i < x; i++) {
cout << "请输入第" << i + 1 << "个链表长度:";
int n;
List L = new ListNode;
L->next = NULL;
cin >> n;
createList(L, n);
list.push_back(L->next);
}
cout << x << "个链表合并为:";
printList(mergeKLists(list));
return 0;
}