#include<stdio.h>
struct list{
int fadr;
int radr;
int data;
};
struct list list0[100000],list1[100000];
int main(){
int fadr,radr,data;
int fir,n;
int i,j,k,m;
int q,w;
scanf("%d %d",&fir,&n);
for(i=0;i<n;i++){
//用数组的序号来表示地址,直接将数据存入对应的序号的顺序表里
scanf("%d %d %d",&fadr,&data,&radr);
list0[fadr].fadr=fadr;
list0[fadr].radr=radr;
list0[fadr].data=data;
}
j=0;
while(1){
//链表先按顺序进行排列
list1[j].fadr=list0[fir].fadr;
list1[j].radr=list0[fir].radr;
list1[j].data=list0[fir].data;
if(list0[fir].radr==-1) break;
fir=list0[fir].radr;
j++;
}
//链表重排为最终输出链表
q=0;w=0;
for(m=0;m<n;m++){
if(m%2==0){
list0[m].fadr=list1[n-1-q].fadr;
list0[m].data=list1[n-1-q].data;
if(m==n-1){
list0[m].radr=-1;
}else{
list0[m].radr=list1[w].fadr;
}
q++;
}else{
list0[m].fadr=list1[w].fadr;
list0[m].data=list1[w].data;
if(m==n-1){
list0[m].radr=-1;
}else{
list0[m].radr=list1[n-1-q].fadr;
}
w++;
}
}
//输出
for(k=0;k<n;k++){
if(k==n-1) printf("%05d %d %d\n",list0[k].fadr,list0[k].data,list0[k].radr);
else printf("%05d %d %05d\n",list0[k].fadr,list0[k].data,list0[k].radr);
}
}
重排链表(27/30)
最新推荐文章于 2023-08-24 14:50:46 发布