原题链接:1052 Linked List Sorting (25分)
分析:
使用哈希map
对数据进行读入,将在这条链表上的放到vector
中。
注意for
循环在链表中的应用。
满分代码:
#include <iostream>
#include <vector>
#include <set>
#include <map>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <unordered_map>
#define inf 0x3f3f3f3f
typedef long long LL;
using namespace std;
const int MAXN = 1e3+10;
/*
神奇的for循环遍历
1. 写结构体的时候注意输入和放入顺序
*/
struct Node {
string address;
int key;
string next;
bool operator< (const Node& t) {
return key < t.key;
}
};
int main() {
int n;
char head[10];
scanf("%d %s", &n, head);
// address Node
unordered_map<string, Node> map;
char address[10], next[10];
for(int i = 0; i < n; i++) {
int key;
scanf("%s%d%s", address, &key, next);
map[address] = {address, key, next};
// auto & p = map[address]; // 读入检验
// cout << p.address << " " << p.key << " " << p.next << endl;
}
vector<Node> nodes;
for(string i = head; i != "-1"; i = map[i].next) {
nodes.push_back(map[i]);
}
printf("%d ", nodes.size());
if(nodes.empty()) {
puts("-1");
} else {
sort(nodes.begin(), nodes.end());
printf("%s\n", nodes[0].address.c_str());
for(int i = 0; i < nodes.size(); i++) {
if(i == nodes.size() - 1) {
printf("%s %d -1\n", nodes[i].address.c_str(), nodes[i].key);
} else {
printf("%s %d %s\n", nodes[i].address.c_str(), nodes[i].key, nodes[i+1].address.c_str());
}
}
}
return 0;
}