//重排静态链表的顺序, 根据题目要求遍历整个表,将符合条件的依次取出放入ans数组
#include<cstdio>
#include<vector>
using namespace std;
struct Node
{
int id, data, next;
int vis;
};
Node linklist[100010];
int main() {
int s, d, k;
scanf("%d%d%d", &s, &d, &k);
for (int i = 0; i < d; i++) {
int id, da, next;
scanf("%d%d%d", &id, &da, &next);
linklist[id].id = id;
linklist[id].data = da;
linklist[id].next = next;
}
vector<Node> ans;
int next = linklist[s].id;
while (next != -1) {
if (linklist[next].data < 0) {
ans.push_back(Node{ next, linklist[next].data, linklist[next].next });
linklist[next].vis = 1;
}
next = linklist[next].next;
}
next = linklist[s].id;
while (next != -1) {
if (linklist[next].data >= 0 && linklist[next].data <= k)
{
ans.push_back(Node{ next, linklist[next].data, linklist[next].next });
linklist[next].vis = 1;
}
next = linklist[next].next;
}
next = linklist[s].id;
while (next != -1) {
if (linklist[next].vis == 0)
{
ans.push_back(Node{ next, linklist[next].data, linklist[next].next });
linklist[next].vis = 1;
}
next = linklist[next].next;
}
for (int i = 0; i < ans.size() - 1; i++) {
printf("%05d %d %05d\n",ans[i].id, ans[i].data,ans[i+1].id);
}
printf("%05d %d -1", ans[ans.size() - 1].id, ans[ans.size() - 1].data);
return 0;
}
PAT A1133
最新推荐文章于 2021-08-23 16:00:31 发布