题目地址:http://pat.zju.edu.cn/contests/pat-a-practise/1052
PAT的数据卡的太蛋疼了:
(1)并不是所有输入的节点都是链表上的节点;
(2)若链表为空,输出0 -1.
C语言源码:
#include<stdio.h>
#include<stdlib.h>
#define maxsize 100010
typedef struct node
{
int num,key,next;
}node;
node A[maxsize],S[maxsize];
int cmp(const void *a,const void *b)
{
node *aa=(node *)a;
node *bb=(node *)b;
return aa->key-bb->key;
}
int main()
{
int n,i,start,num,key,next,top;
scanf("%d %d",&n,&start);
for(i=0;i<n;i++)
{
scanf("%d %d %d",&num,&key,&next);
A[num].num=num;
A[num].key=key;
A[num].next=next;
}
top=0;
i=start;
while(i!=-1)
{
S[top].num=A[i].num;
S[top].key=A[i].key;
S[top++].next=A[i].next;
i=A[i].next;
}
qsort(S,top,sizeof(S[0]),cmp);
if(top==0)
printf("0 -1\n");
else
{
printf("%d %05d\n",top,S[0].num);
for(i=0;i<top-1;i++)
printf("%05d %d %05d\n",S[i].num,S[i].key,S[i+1].num);
printf("%05d %d -1\n",S[i].num,S[i].key);
}
return 0;
}