吉大秦少游 2018-10-26 01:20 采纳率: 0%
浏览 635

1025 反转链表 ,提交没有AC,单独测试倒是可以

 //PAT1025V1
#include <stdio.h>

int main(){
    double i;
    int n,j,m=0,k,t;
    scanf("%lf %d %d",&i,&n,&k);    //i是首地址,是排序的关键 
    struct ChainTable{
        double add;
        int value;
        double NextAdd;
    }NodeInf[n],SortNode[n];
    for(j=0;j<n;j++){
        scanf("%lf %d %lf",&NodeInf[j].add,&NodeInf[j].value,&NodeInf[j].NextAdd);
    }

    //sort  原节点NodeInf[]排列之后为SortNode[] 
    j=0;
    while(j!=6){
        for(m=0;m<n;m++){
            if(NodeInf[m].add==i){
                if(NodeInf[m].NextAdd!=-1){
                    SortNode[j].add=NodeInf[m].add;
                    SortNode[j].value=NodeInf[m].value;
                    SortNode[j].NextAdd=NodeInf[m].NextAdd;
//                  printf("\n%05d %d %05d",NodeInf[m].add,NodeInf[m].value,NodeInf[m].NextAdd);    //0的位数补全方法 
                }   
                else{
                    SortNode[j].add=NodeInf[m].add;
                    SortNode[j].value=NodeInf[m].value;
                    SortNode[j].NextAdd=NodeInf[m].NextAdd;
//                  printf("\n%05d %d %d",NodeInf[m].add,NodeInf[m].value,NodeInf[m].NextAdd);
                }   
                i=NodeInf[m].NextAdd;
                j++;
            //  break;
            }
        }   
    } 
/*  
    for(m=0;m<n;m++){
        if(SortNode[m].NextAdd!=-1){
            printf("\n%05d %d %05d",SortNode[m].add,SortNode[m].value,SortNode[m].NextAdd); //0的位数补全方法 
        }   
        else{
            printf("\n%05d %d %d",SortNode[m].add,SortNode[m].value,SortNode[m].NextAdd);
       }    
    }
    printf("\n\n");
*/  
    //reverse
    //first step:divide 分段
    int d=n/k,y=n%(int)(k);     //分成d段,段内反转;剩余y个 
//  printf("%d %d",d,y);

    //second step:reverse in the section loop
    if(y!=0){   //分段之后有剩余 
        for(j=1;j<=d;j++){  //每段进行reverse 
            for(m=j*k-1;m>=(j-1)*k;m--){    //逆序输出 
                if(j<=d-1){     //倒数第二段(包含)之前的处理办法 
                    if(m>(j-1)*k)   // 倒数第二段之前的分段中倒数第二个元素(包含)之前的处理办法
                        printf("\n%05.0lf %d %05.0lf",SortNode[m].add,SortNode[m].value,SortNode[m-1].add); //0的位数补全方法
                    else    // 倒数第二段之前的分段中最后一个元素的处理办法
                        printf("\n%05.0lf %d %05.0lf",SortNode[m].add,SortNode[m].value,SortNode[m+1+k].add);   //0的位数补全方法
                }
                else{   //最后一段的处理办法 
                    if(m>(j-1)*k)   // 最后一段的分段中倒数第二个元素(包含)之前的处理办法
                        printf("\n%05.0lf %d %05.0lf",SortNode[m].add,SortNode[m].value,SortNode[m-1].add); //0的位数补全方法
                    else    // 最后一段的分段中最后一个元素的处理办法
                        printf("\n%05.0lf %d %05.0lf",SortNode[m].add,SortNode[m].value,SortNode[m+k].add); //0的位数补全方法
                }            
            }
        } 
        for(t=d*k;t<n;t++){ //分段剩余部分直接输出 
            if(SortNode[t].NextAdd!=-1) 
                printf("\n%05.0lf %d %05.0lf",SortNode[t].add,SortNode[t].value,SortNode[t].NextAdd);   //0的位数补全方法 
            else 
                printf("\n%05.0lf %d -1",SortNode[t].add,SortNode[t].value);
        }

    } 
    if(y==0){   //分段之后无剩余 
        for(j=1;j<=d;j++){  //每段进行reverse 
            for(m=j*k-1;m>=(j-1)*k;m--){    //逆序输出 
                if(j<=d-1){     //倒数第二段(包含)之前的处理办法 
                    if(m>(j-1)*k)   // 倒数第二段之前的分段中倒数第二个元素(包含)之前的处理办法
                        printf("\n%05.0lf %d %05.0lf",SortNode[m].add,SortNode[m].value,SortNode[m-1].add); //0的位数补全方法
                    else    // 倒数第二段之前的分段中最后一个元素的处理办法
                        printf("\n%05.0lf %d %05.0lf",SortNode[m].add,SortNode[m].value,SortNode[m+1+k].add);   //0的位数补全方法
                }
                else{   //最后一段的处理办法 
                    if(m>(j-1)*k)   // 最后一段的分段中倒数第二个元素(包含)之前的处理办法
                        printf("\n%05.0lf %d %05.0lf",SortNode[m].add,SortNode[m].value,SortNode[m-1].add); //0的位数补全方法
                    else    // 最后一段的分段中最后一个元素的处理办法
                        printf("\n%05.0lf %d -1",SortNode[m].add,SortNode[m].value);    //0的位数补全方法    
                }            
            }
        }   
    }   
}
  • 写回答

2条回答 默认 最新

  • 吉大秦少游 2018-10-26 01:21
    关注

    图片说明

    评论

报告相同问题?

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀