题目
思路
简单题,用一个hash数组存储每个结点的数据和下一跳地址,然后从首地址开始遍历,顺序将结点存入一个vector数组中,包括当前节点和节点数据,然后对vector数组进行reverse操作,顺序输出即可
代码
#include <iostream>
#include<algorithm>
#include<vector>
using namespace std;
#define nmax 100005
#define inf 999999
struct La{
int next_ad;
int data;
}LL[nmax];
struct Lb {
int cur_ad;
int data;
};
vector<Lb> vec;
int main()
{
int first_ad, num, K;
cin >> first_ad >> num >> K;
for (int i = 0; i < num; ++i) {
int cur_ad, data, next_ad;
cin >> cur_ad;
cin >> LL[cur_ad].data >> LL[cur_ad].next_ad;
}
int cur_ad = first_ad;
while (cur_ad != -1) {
Lb tmp = { cur_ad , LL[cur_ad].data };
vec.emplace_back(tmp);
cur_ad = LL[cur_ad].next_ad;
}
int size = vec.size();
for (int i = 0; i < size; i += K) {
if (i + K > size)
break;
reverse(vec.begin()+i, vec.begin() + i+K);
}
int i = 0;
for (; i < size - 1; ++i) {
printf("%05d %d %05d\n", vec[i].cur_ad, vec[i].data, vec[i + 1].cur_ad);
}
printf("%05d %d -1\n", vec[i].cur_ad, vec[i].data);
return 0;
}