题解 静态链表
先用了map确定他们的顺序
再将mp赋值给结构体数组
在结构体数组里进行反转
反转用的是reverse函数
有几个地方需要注意 ps: 在注释
#include <iostream>
#include <cstdlib>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
struct LNode
{
int Id, Data;
int Next;
};
int main()
{
int fistId;
int N, M;
cin >> fistId >> N >> M;
//用id做名字
map<int, LNode> X;
X[fistId].Id = fistId;
for (int i = 0; i < N; i++)
{
int a, b, c;
cin >> a >> b >> c;
X[a] = {a, b, c};
}
LNode ans[100005];
int index = 0;
//利用mp遍历整个 这样额外的点也会被忽略了
for (int i = fistId; i != -1; i = X[i].Next)
{
ans[index++] = X[i];
}
//反转 注意不是小于等于N 是index
//如果是N的话就把额外的点算进去了
for (int i = 0; i + M <= index; i += M)
{
reverse(ans + i, ans + (i + M));
}
for (int i = 0; i < index; i++)
{
if (i == index - 1)
{
printf("%05d %d -1\n", ans[i].Id, ans[i].Data);
break;
}
//最坑的一个地方: 必须得是ans[i+1].Id 如果是Next大部分都过不去
printf("%05d %d %05d\n", ans[i].Id, ans[i].Data, ans[i + 1].Id);
}
return 0;
}