浙大数据结构课后习题 练习二 7-2 Reversing Linked List (25 分)
Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elements on L. For example, given L being 1→2→3→4→5→6, if K=3, then you must output 3→2→1→6→5→4; if K=4, you must output 4→3→2→1→5→6.
Input Specification:
Each input file contains one test case. For each case, the first line contains the address of the first node, a positive N (≤) which is the total number of nodes, and a positive K (≤) which is the length of the sublist to be reversed. The address of a node is a 5-digit nonnegative integer, and NULL is represented by -1.
Then N lines follow, each describes a node in the format:
Address Data Next
where Address
is the position of the node, Data
is an integer, and Next
is the position of the next node.
Output Specification:
For each case, output the resulting ordered linked list. Each node occupies a line, and is printed in the same format as in the input.
Sample Input:
00100 6 4
00000 4 99999
00100 1 12309
68237 6 -1
33218 3 00000
99999 5 68237
12309 2 33218
Sample Output:
00000 4 33218
33218 3 12309
12309 2 00100
00100 1 99999
99999 5 68237
68237 6 -1
#include <iostream>
#include <vector>
#define M 100000
using namespace std;
struct ele{
int addr;
int data;
int next=-;
};
int main(){
int iniAddr,num,revNum,tmpAddr,tmpData,tmpNext;
ele element[M],last;
cin>>iniAddr>>num>>revNum;
while(num--){
cin>>tmpAddr>>tmpData>>tmpNext;
element[tmpAddr].addr=tmpAddr;
element[tmpAddr].data=tmpData;
element[tmpAddr].next=tmpNext;
}
vector<ele> vec;
while(iniAddr!=-){
vec.push_back(element[iniAddr]);
iniAddr=element[iniAddr].next;
}
//反转
int point=;bool start=true;
while(true){
point+=revNum;
if(point>vec.size()) break;
else{
for(int i=point-,j=;j<revNum;j++,i--){
if(start) printf("%05d ",vec[i].addr);
else printf("%05d\n%05d ",vec[i].addr,vec[i].addr);
printf("%d ",vec[i].data);
last=vec[i];
start=false;
}
}
}
point-=revNum;
for(int i=point;i<vec.size();i++){
if(start) printf("%05d ",vec[i].addr);
else printf("%05d\n%05d ",vec[i].addr,vec[i].addr);
printf("%d ",vec[i].data);
start=false;
last=vec[i];
}
printf("-1");
system("pause");
return ;
}
最新文章
- SpringMVC那点事
- Xcode7以后 使用空模板
- user profile services提示&ldquo;BAIL: MMS(7116): sql.cpp(8490): 0x80231334 (The sql connection string has unsupported values.)&rdquo;解决办法
- SQLChop、SQLWall(Druid)、PHP Syntax Parser Analysis
- paip.提升性能---string split
- [c#] const 与 readonly
- Lua函数之二
- HTML5自学笔记[ 15 ]canvas绘图实例之钟表
- WCF学习心得------(六)数据协定
- 【Binary Tree Inorder Traversal】cpp
- Lua print on the same line
- POJ2002Squares
- [iOS UI进阶 - 2.4] 彩票Demo v1.4 转盘动画
- Hadoop MapReduce概念学习系列之mr程序详谈(二十三)
- nginx 502
- IC卡存储器介绍
- Python 2.7 Exception格式化工具
- 黑马程序员:Java基础总结----正则表达式
- 拷贝一张图片,从一个目录到另外一个目录下(PS:是拷贝是不是移动)
- Tomcat(二):tomcat配置文件server.xml详解和部署简介