zoukankan      html  css  js  c++  java
  • C++课堂作业(2)

    github的链接:

    https://github.com/deepYY/object-oriented/tree/master/PAT.1025

    题目

    给定一个常数K以及一个单链表L,请编写程序将L中每K个结点反转。例如:给定L为1→2→3→4→5→6,K为3,则输出应该为3→2→1→6→5→4;如果K为4,则输出应该为4→3→2→1→5→6,即最后不到K个元素不反转。
    
    输入格式:
    
    每个输入包含1个测试用例。每个测试用例第1行给出第1个结点的地址、结点总个数正整数N(<= 105)、以及正整数K(<=N),即要求反转的子链结点的个数。结点的地址是5位非负整数,NULL地址用-1表示。
    
    接下来有N行,每行格式为:
    
    Address Data Next
    
    其中Address是结点地址,Data是该结点保存的整数数据,Next是下一结点的地址。
    
    输出格式:
    
    对每个测试用例,顺序输出反转后的链表,其上每个结点占一行,格式与输入相同。
    
    输入样例:
    00100 6 4
    00000 4 99999
    00100 1 12309
    68237 6 -1
    33218 3 00000
    99999 5 68237
    12309 2 33218
    输出样例:
    00000 4 33218
    33218 3 12309
    12309 2 00100
    00100 1 99999
    99999 5 68237
    68237 6 -1
    

    代码如下

    #include<iostream>
    using namespace std;
    struct list
    {
    	int address;
    	int data;
    	int nex;
    } a[100000],b[100000];
    
    int main()
    {
    	int dz,n,k,i,add;
    	cin >> dz >> n >> k ;
    	int ck=k;
    	for(i=0;i<n;i++)  //输入数据
    	{
    		cin>>add;
    		a[add].address=add;
    		cin >> a[add].data >> a[add].nex;
    	}
    	int j=0;
    	while(dz!=-1)   //重新排序的链表
    	{
    		b[j].address=a[dz].address;
    		b[j].data=a[dz].data;
    		b[j].nex=a[dz].nex;
    		dz=a[dz].nex;
    		j++;
    	}
    	
      int temp = 0, t = k - 1;
        while( t < j )  //反转链表
        {
            while( t > temp )
            {
                b[t].nex = b[t - 1].address;
                printf( "%05d %d ", b[t].address, b[t].data );
                if( b[t].nex != -1 )
                    printf( "%05d
    ", b[t].nex );
                else
                    printf( "-1
    " );
                t--;
            }
            if( temp + 2 * k - 1 < j )
                b[temp].nex = b[temp + 2 * k - 1].address;
            else if( temp + k == j )
                b[temp].nex = -1;
            else
                b[temp].nex = b[temp + k].address;
            printf( "%05d %d ", b[temp].address, b[temp].data );
            if( b[temp].nex != -1 )
    		   printf( "%05d
    ", b[temp].nex );
            else
                printf( "%d
    ", b[temp].nex );
            temp += k;
            t = temp + k - 1;
        }
    
        while( temp < j )
        {
            printf( "%05d %d ", b[temp].address, b[temp].data );
            if( b[temp].nex != -1 )  printf( "%05d
    ", b[temp].nex );
            else printf( "-1
    " );
            temp++;
        }
    	return 0;
    }
    
  • 相关阅读:
    学习方法:费曼学习方法
    学习方法:天才的秘密
    学习方法:学习的大致过程
    OS:VM虚拟机连不上网络
    cpp:argc和argv的应用
    baidu:{{!!}}
    os:windows许可证书位置
    书法:练字的心得体会
    修复Python终端中敲击方向键显示 [ ^[[A, ^[[B, ^[[C, ^[[D ]
    jquery下removeClass(“oldClassName”).addClass("newClassName")的问题
  • 原文地址:https://www.cnblogs.com/deepYY/p/5516613.html
Copyright © 2011-2022 走看看