原题链接:
https://pintia.cn/problem-sets/994805342720868352/exam/problems/type/7?problemSetProblemId=994805425780670464&page=0
注意点:
- 仅将在链表中的节点进行排序和输出。
- 头节点可能为-1,即链表为空,需要特殊处理
代码:
#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
#include <iomanip>
using namespace std;
#define endl '\n'
int N;
int addHead;
struct node {
int address;
int key;
int next;
};
map<int, node> m;//将address映射为node
vector<node> nodes;
vector<node> v;
void findLinked() {
if (addHead == -1) {
return;
}
node now = m[addHead];
v.emplace_back(now);
while (now.next != -1) {
node nextNode = m[now.next];
v.emplace_back(nextNode);
now = nextNode;
}
return;
}
bool cmp(node& a, node& b) {
return a.key < b.key;
}
signed main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin >> N;
cin >> addHead;
for (int i = 0; i < N; i++) {
node temp;
cin >> temp.address >> temp.key >> temp.next;
m[temp.address] = temp;
}
findLinked();//将在链表中的节点插入v中
sort(v.begin(), v.end(),cmp);
cout << v.size() << " ";
for (int i = 0; i < v.size(); i++) {
cout <<setw(5)<<setfill('0') << v[i].address << endl;
cout << setw(5) << setfill('0') << v[i].address << " ";
cout << v[i].key << " ";
}
cout << -1 << endl;
return 0;
}