C++课堂作业(2)
2016-05-22 13:15
417 查看
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\n", b[t].nex ); else printf( "-1\n" ); 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\n", b[temp].nex ); else printf( "%d\n", 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\n", b[temp].nex ); else printf( "-1\n" ); temp++; } return 0; }
相关文章推荐
- c++实验6——数组合并
- Ubuntu 14 g++ 使用c++11特性报错
- 单链表及其基本操作(C语言实现)
- C语言基本数据类型大小
- C++ 高级篇(二)—— 名空间 (Namespaces)
- C++ 高级篇(一)—— 模板(Templates)
- 问题:c++中0,‘\0’,‘0’,"0"有什么区别
- 图解Dev C++ 创建Win32 项目模板
- C++ 面向对象(四)—— 多态 (Polymorphism)
- C++ 面向对象(三)—— 类之间的关系
- C++ 面向对象(二)—— 操作符重载
- C++ 面向对象(一)—— 类(Classes)
- 基于Eigen库的离散拉普拉斯平滑(Discretized Laplacian Smoothing)的C++非稀疏矩阵实现
- C++中的函数指针
- C++ 高级数据类型(六)—— 自定义数据类型
- C++ 高级数据类型(四)—— 动态内存分配
- C++ 高级数据类型(三)—— 指针
- C++引用与指针的比较
- C++ 高级数据类型(二)—— 字符序列
- C++ 高级数据类型(一)—— 数组