自己写的代码如下,虽然还有很多问题,但样例的运行结果和网上找的答案一个符号都没差,就是一个检测点都过不去,完全不知道错在哪里了!一头雾水

#include<stdio.h>
#include<stdlib.h>
struct ListNode{
int Address,Data,Next;
};
typedef struct ListNode* List;
int main(){
List p,q;
int a,b,c,m=1,x,z;
scanf("%d %d %d",&a,&b,&c);
p=(List)malloc(sizeof(struct ListNode)*(b+1));
q=(List)malloc(sizeof(struct ListNode)*(b+1));
p[0].Address=a,p[0].Data=b,p[0].Next=c;
for(int i=b;i>0;i--){
scanf("%d %d %d",&a,&b,&c);
p[b].Address=a,p[b].Data=b,p[b].Next=c;
}
x=p[0].Next;
z=p[0].Data;
while(p[0].Next<=p[0].Data){
for(int n=1,y=x;n<=p[0].Next;n++){
q[m].Address=p[y].Address;
q[m].Data=p[y].Data;
q[m].Next=p[y].Next;
m++;
y--;
}
p[0].Data-=p[0].Next;
x*=2;
}
while(m<=z){
q[m].Address=p[m].Address;
q[m].Data=p[m].Data;
q[m].Next=p[m].Next;
m++;
}
for(int i=1;i<z;i++){
q[i].Next=q[i+1].Address;
}
free(p);
for(int i=1;i<z;i++){
printf("%05d %d %05d\n",q[i].Address,q[i].Data,q[i].Next);
}
printf("%05d %d -1\n",q[z].Address,q[z].Data);
return 0;
}