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;
}
原文地址:https://www.cnblogs.com/deepYY/p/5516613.html