本题中,每个节点中的next信息仅在将输入信息按顺序排列时有用,其他地方可以避免任何链表操作。是非常容易的25分~
#include<stdio.h>
#include<vector>
#include<map>
using namespace std;
struct Node
{
int address;
int data;
int next;
};
map<int, Node> nodes;
vector<Node> link;
vector<Node> ans;
int main()
{
int head, N, K;
scanf("%d%d%d", &head, &N, &K);
for (int i = 0; i < N; i++)
{
Node node;
scanf("%d%d%d", &node.address, &node.data, &node.next);
nodes[node.address] = node;
}
while (head != -1)
{
link.push_back(nodes[head]);
head = nodes[head].next;
}
for (int i = 0; i < link.size() / K; i++)
{
for (int j = K - 1; j >= 0; j--)
{
ans.push_back(link[i*K + j]);
}
}
for (int i = (link.size() / K) * K; i < link.size(); i++)
{
ans.push_back(link[i]);
}
for (int i = 0; i < ans.size()-1; i++)
{
printf("%05d %d %05d\n", ans[i].address, ans[i].data, ans[i + 1].address);
}
printf("%05d %d -1\n", ans.back().address, ans.back().data);
return 0;
}