#include
#include
#include
#include
#include
bool cmp(Node a, Node b)
{
if(a.flag==0 || b.flag==0)
{
return a.flag>b.flag;
}
else
return a.data
int main()
{
int n,s1;
int count = 0;
int data,address,next;
scanf("%d%d",&n,&s1);
for(int i=0;i
node[i].flag = 0;
}
for(int i=0;i
scanf("%d%d%d",&address,&data,&next);
node[address].address=address;
node[address].data = data;
node[address].next = next;
}
for(int begin = s1;begin!=-1;begin=node[begin].next)
{
count++;
node[begin].flag = 1;
}
sort(node,node+maxn,cmp);
if(count==0)
printf("0 -1\n");
else{
printf("%d %05d\n",count,node[0].address);
for(int i=0;i
if(i!=count-1)
printf("%05d %d %05d\n",node[i].address,node[i].data,node[i+1].address);
else
printf("%05d %d -1\n",node[i].address,node[i].data);
}
}
return 0;
}
错误:1
for(int i=0;i
if(i!=count-1)
printf("%05d %d %05d\n",node[i].address,node[i].data,node[i+1].address);
else
printf("%05d %d -1\n",node[i].address,node[i].data);
}
}
这一部分最初写成:
for(int i=0;i
printf("%05d %d %05d\n",node[i].address,node[i].data,node[i+1].address);
if(i==count-1)
printf("%05d %d -1\n",node[i].address,node[i].data);
}
输出两次最后一行
2、这里最后printf里不是输出node[i].next,而是node[i+1].address
由于重新排序next指针域也要改变
3、特殊情况输出0,-1需要一个if 大else分支
4、需要flag确保cmp 因为输入不一定是在一个链表里的节点