1,题目
2注意点
- 注意倒数第二测试点可能出现不在链表中的结点,因此输出时不能固定输出N个,而是num_result个结点。
for(int i=0; i<num_result; ++i) {
if(i==num_result-1) {
printf("%.5d %d -1\n",result[i].Address,result[i].Data);
} else {
printf("%.5d %d %.5d\n",result[i].Address,result[i].Data,result[i+1].Address);
}
}
3,代码
#include<stdio.h>
struct Node {
int Address,Data,Next;
int isPrint;
Node() {
isPrint=0;
Next=-1;
}
} nodes[100010],result[100010];
int main() {
int first_node,N,K;
scanf("%d %d %d",&first_node,&N,&K);
int Address,Data,Next;
for(int i=0; i<N; ++i) {
scanf("%d %d %d",&Address,&Data,&Next);
nodes[Address].Address=Address;
nodes[Address].Data=Data;
nodes[Address].Next=Next;
}
int s=first_node,num_result=0;
while(s!=-1) {
if(nodes[s].Data<0&&nodes[s].isPrint==0) {
nodes[s].isPrint=1;
result[num_result++]=nodes[s];
}
s=nodes[s].Next;
}
s=first_node;
while(s!=-1) {
if(nodes[s].Data>=0&&nodes[s].Data<=K&&nodes[s].isPrint==0) {
nodes[s].isPrint=1;
result[num_result++]=nodes[s];
}
s=nodes[s].Next;
}
s=first_node;
while(s!=-1) {
if(nodes[s].Data>K&&nodes[s].isPrint==0) {
nodes[s].isPrint=1;
result[num_result++]=nodes[s];
}
s=nodes[s].Next;
}
for(int i=0; i<num_result; ++i) {
if(i==num_result-1) {
printf("%.5d %d -1\n",result[i].Address,result[i].Data);
} else {
printf("%.5d %d %.5d\n",result[i].Address,result[i].Data,result[i+1].Address);
}
}
return 0;
}
。。。再会。。。