分析:
- 把给定的地址信息和地址对应的值存起来,用n[N], 和ne[N]来存储
- 根据n[N]和ne[N]数组,将这两个链表抽取出来,分别存储到vector的a和b中,每个元素的存储方式采取C++中的pair<int, int>来实现
- 根据题目要求的输出规则,将每个数据以pair<int, int>的形式存储到vector的c中。
- 输出c向量即可。
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
const int N = 1e5 + 10;
typedef pair<int, int> PII;
int h1, h2, n, e[N], ne[N];
int main(){
int addr1, addr2, number;
cin >> h1 >> h2 >> n;
for(int i = 0; i < n; i++){
cin >> addr1 >> number >> addr2;
e[addr1] = number;
ne[addr1] = addr2;
}
vector<PII> a, b, c;
for(int i = h1; i != -1; i = ne[i]) a.push_back({i, e[i]});
for(int i = h2; i != -1; i = ne[i]) b.push_back({i, e[i]});
if (a.size() < b.size()) swap(a, b);
for(int i = 0, j = b.size() - 1; i < a.size(); i += 2, j--){
c.push_back(a[i]);
if (i + 1 < a.size()) c.push_back(a[i + 1]);
if (j >= 0) c.push_back(b[j]);
}
for(int i = 0; i < c.size(); i++){
printf("%05d %d ", c[i].first, c[i].second);
if (i + 1 < c.size()) printf("%05d\n", c[i + 1].first);
else cout << -1;
}
return 0;
}