题目传送门
用一个数组来存储地址,然后反转这个数组,再输出就行了。
while (first != -1)
{
address[sum++] = first;
first = next[first];
}
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int first, k, n, temp;
cin >> first >> n >> k;
int data[100005], next[100005], address[100005];
for (int i = 0; i < n; i++)
{
cin >> temp;
cin >> data[temp] >> next[temp];
}
int sum = 0;
while (first != -1)
{
address[sum++] = first;
first = next[first];
}
for (int i = 0; i < (sum - sum % k); i += k)
{
reverse(address + i, address + i + k);
}
for (int i = 0; i < sum - 1; i++)
{
printf("%05d %d %05d\n", address[i], data[address[i]], address[i + 1]);
}
printf("%05d %d -1", address[sum - 1], data[address[sum - 1]]);
return 0;
}