|reverse(v1.begin(),v2.end())&swap(v1,v2)&塊數&next不同的第j塊|19秋-1161-Merging Linked Lists(25分)
阿新 • • 發佈:2021-01-30
技術標籤:PAT甲
連結串列存在vector裡,不用再通過order來cmp來排序了
reverse(v1.begin(),v1.end())
swap(v1,v2)
#include <iostream>
#include <vector>
using namespace std;
int const maxn = 100010;
struct Node {
int address, data, next;
int order;
}node[maxn],node1[maxn],node2[maxn];
vector<Node>v1, v2;
int main() {
int s1, s2, n;
cin >> s1 >> s2 >> n;
for (int i = 0; i < maxn;i++) {
node[i].order= 2 * maxn;
}
for (int i = 0; i < n; i++) {
int address;
cin >> address;
node[address].address = address;
cin >> node[address].data >> node[address].next;
}
int p1;
for (p1 = s1; p1 != -1; p1 = node[p1].next) {
v1.push_back(node[p1]);
}
int p2;
for (p2 = s2; p2 != -1; p2 = node[p2].next) {
v2.push_back(node[p2]);
}
if (v1.size() < v2.size())swap(v1, v2);//v2存小的
reverse(v2.begin(), v2.end());
//i<2
//v1存長的
//第i塊
//把短的先輸出
for (int i = 0; i < v2.size(); i++) {
int j;
for (j = 0; j < 2; j++) {
if (j == 0)
printf("%05d %d %05d\n", v1[i * 2 + j].address, v1[i * 2 + j].data,v1[i*2 +j+1].address);
else
printf("%05d %d ", v1[i * 2 + j].address, v1[i * 2 + j].data);
}
printf("%05d\n", v2[i].address);
printf("%05d %d ", v2[i].address, v2[i].data);
printf("%05d\n", v1[i * 2 + j].address);
}
//把剩下的長的輸出了
for (int i = v2.size()*2;i < v1.size(); i++) {
printf("%05d %d %d\n", v1[i].address, v1[i].data, v1[i].next);
}
return 0;
}
/*
00100 01000 7
02233 2 34891
00100 6 00001
34891 3 10086
01000 1 02233
00033 5 -1
10086 4 00033
00001 7 -1
01000 1 02233
02233 2 00001
00001 7 34891
34891 3 10086
10086 4 00100
00100 6 00033
00033 5 -1
*/