#include<iostream>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;
struct Node {
string address;
int data;
string next;
};
int main() {
string address1, address2;
string address, next;
int n, data;
map<string, Node> list;
vector<Node> list1, list2, listans;
cin >> address1 >> address2 >> n;
while (n--) {
cin >> address >> data >> next;
Node node;
node.address = address;
node.data = data;
node.next = next;
list[address] = node;
}
while (1) {
if (address1 == "-1") break;
list1.push_back(list[address1]);
address1 = list[address1].next;
}
while (1) {
if (address2 == "-1") break;
list2.push_back(list[address2]);
address2 = list[address2].next;
}
if (list2.size() < list1.size()) {
reverse(list2.begin(), list2.end());
}
else {
reverse(list1.begin(), list1.end());
}
int index1, index2;
for (index1 = 0, index2 = 0; index1<list1.size() && index2 < list2.size();) {
if (list1.size() > list2.size()) {
listans.push_back(list1[index1++]);
listans.push_back(list1[index1++]);
listans.push_back(list2[index2++]);
}
else {
listans.push_back(list2[index2++]);
listans.push_back(list2[index2++]);
listans.push_back(list1[index1++]);
}
}
for (; index1 < list1.size();) {
listans.push_back(list1[index1++]);
}
for (; index2 < list2.size();) {
listans.push_back(list2[index2++]);
}
for (int i = 0; i < (listans.size() - 1); i++) {
cout << listans[i].address << " " << listans[i].data << " " << listans[i + 1].address << endl;
}
cout << listans[listans.size() - 1].address << " " << listans[listans.size() - 1].data << " -1" << endl;
return 0;
}
PAT B1105 链表合并
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 题目 链接:PAT (Basic Level) Practice 1025 反转链表 给定一个常数 K 以及一个单...
- 传送门 https://pintia.cn/problem-sets/994805260223102976/pro...
- 单词积累 clockwise 顺时针方向的 spiral 螺旋的 思路 本质是模拟的思想,用i标记遍历到第几圈,然...