总结:
1.采用两个数组存储每个节点的数据和下一个节点的地址
2.reverse操作通过遍历一遍链表把每个节点的地址存在list中,然后将翻转操作变成从list到result地址的对应变化输出即可
代码:
#include <iostream>
using namespace std;
int data[110000], next1[110000];
int list[11000], result[110000];
int main() {
int begin, n, tt;
scanf("%d%d%d",&begin,&n,&tt);
for (int i = 0; i < n; i++)
{
int add;
scanf("%d",&add);
scanf("%d%d", &data[add], &next1[add]);
}
int num = 0; int k = begin;
while (k!=-1){
list[num++] = k;
//printf("%05d %d %05d\n",k,data[k],next1[k]);
k = next1[k];
}
int ci = num / tt; int yu = num%tt; int yt = 0;
for (int i = 0; i < num - yu; i++)
{
yt = i / tt;
result[((tt - 1) - i%tt) + tt*yt]=list[i];
}
for (int i = num - yu; i < num; i++)
result[i] = list[i];
//输出
for (int i = 0; i < num-1; i++)
{
printf("%05d %d %05d\n", result[i], data[result[i]], result[i+1]);
}
printf("%05d %d -1\n", result[num-1], data[result[num-1]], next1[result[num-1]]);
return 0;
}