pat-basic-1025

我的代码:

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdbool.h>
#include <stdlib.h>
struct node{
    int data;
    int add;
};
int linked[100100][2]={0};
int main(){
    int next,head,n,k;
    int t1,t2,t3,i,t,j;
    struct node out[100001]={0};
    scanf("%d%d%d",&head,&n,&k);
    for(i=0;i<n;i++){
        scanf("%d%d%d",&t1,&t2,&t3);
        linked[t1][0]=t2;
        linked[t1][1]=t3;
    }
    next=head;
    i=0;
    while(next!=-1){
        out[i].data=linked[next][0];
        out[i].add=next;
        next=linked[next][1];
        i++;
    }
    t=i;
    for(i=0;i<t;i=i+k){
        if(i+k<=t){
            for(j=0;j<k/2;j++){
                struct node temp=out[i+j];
                out[i+j]=out[k-j-1+i];
                out[k-j-1+i]=temp;
            }
        }
    }
    for(i=0;i<t;i++){
        if(i==t-1){
            printf("%05d %d -1n",out[i].add,out[i].data);
        }
        else{
            printf("%05d %d %05dn",out[i].add,out[i].data,out[i+1].add);
        }
    }
    return 0;
}

先把数据存到一个二维数组中,数组下标是他的地址,是为了把链表“连起来”,然后顺次将每个数据的地址和数据存到结构体中,然后对数据操作.
注意最后一个节点输出-1.说是链表,其实最后还是普通的数据.