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<cstdio>
#include<algorithm>
using namespace std; const int maxn = ;
struct Node{
int address,data,next;
int flag;
}node[maxn]; bool cmp(Node a,Node b){
return a.flag < b.flag;
} //void print(int i,int k,int n){
// int j;
// for(j = i + k - 1; j >= i; j--){
// printf("%05d %d ",node[j].address,node[j].data);
// if(j > i){
// printf("%05d\n",node[j-1].address);
// }else{
// if(i+2*k<=n){
// printf("%05d\n",node[i+2*k].address);
// }
// }
// }
//} int main(){
for(int i = ; i < maxn; i++){
node[i].flag = maxn;
}
int n,k,begin;
scanf("%d%d%d",&begin,&n,&k);
int address;
for(int i = ; i < n; i++){
scanf("%d",&address);
scanf("%d%d",&node[address].data,&node[address].next);
node[address].address = address;
//node[address].flag = maxn;
}
int count = ,p = begin;
while(p!=-){
node[p].flag = count++;
p = node[p].next;
}
sort(node,node+maxn,cmp);
n = count;
for(int i = ; i < n/k; i++){
for(int j = (i+)*k-; j > i*k; j--){
printf("%05d %d %05d\n",node[j].address,node[j].data,node[j-].address);
}
printf("%05d %d ",node[i*k].address,node[i*k].data);
if(i < n/k-) printf("%05d\n",node[(i+)*k-].address);
else{
if(n%k==) printf("-1\n");
else{
printf("%05d\n",node[(i+)*k].address);
for(i = n/k*k; i < n; i++){
printf("%05d %d ",node[i].address,node[i].data);
if(i < n-) printf("%05d\n",node[i+].address);
else printf("-1\n");
}
}
}
} // if(n == 1){
// printf("%05d %d -1\n",node[0].address,node[0].data);
// return 0;
// }
// bool flag = true;
// if(count%k!=0){
// while(count%k!=0) count--;
// flag = false;
// }
// for(int i = 0; i < count; i += k){
// print(i,k,count);
// }
//
// if(flag == true){
// printf("-1\n");
// }else{
// printf("%05d\n",node[count].address);
// for(int i = count; i < n; i++){
// printf("%05d %d ",node[i].address,node[i].data);
// if(i < n - 1) printf("%05d\n",node[i+1].address);
// else printf("-1\n");
// }
// }
//
// for(int i = 0; i < n; i++){
// printf("%05d %d\n",node[i].address,node[i].data);
// }
return ;
}

02-线性结构3 Reversing Linked List (25 分)的更多相关文章

  1. PTA 02-线性结构3 Reversing Linked List (25分)

    题目地址 https://pta.patest.cn/pta/test/16/exam/4/question/664 5-2 Reversing Linked List   (25分) Given a ...

  2. 02-线性结构3 Reversing Linked List (25 分)

    Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elem ...

  3. pat02-线性结构1. Reversing Linked List (25)

    02-线性结构1. Reversing Linked List (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, ...

  4. PAT 甲级 1074 Reversing Linked List (25 分)(链表部分逆置,结合使用双端队列和栈,其实使用vector更简单呐)

    1074 Reversing Linked List (25 分)   Given a constant K and a singly linked list L, you are supposed ...

  5. 数据结构练习 02-线性结构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 elem ...

  6. 浙大数据结构课后习题 练习二 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 elem ...

  7. 【PAT甲级】1074 Reversing Linked List (25 分)

    题意: 输入链表头结点的地址(五位的字符串)和两个正整数N和K(N<=100000,K<=N),接着输入N行数据,每行包括结点的地址,结点的数据和下一个结点的地址.输出每K个结点局部反转的 ...

  8. PAT甲级1074 Reversing Linked List (25分)

    [程序思路] 先根据地址按顺序读入节点,入栈,当栈里的元素个数等于k时全部出栈,并按出栈顺序保存,最后若栈不为空,则全部出栈并按出栈的稀饭顺序保存,最后输出各节点 注意:输入的节点中有可能存在无用节点 ...

  9. 02-线性结构3 Reversing Linked List

    02-线性结构3 Reversing Linked List   (25分) 时间限制:400ms 内存限制:64MB 代码长度限制:16kB 判题程序:系统默认 作者:陈越 单位:浙江大学 http ...

  10. 02-线性结构3 Reversing Linked List(25 point(s)) 【链表】

    02-线性结构3 Reversing Linked List(25 point(s)) Given a constant K and a singly linked list L, you are s ...

随机推荐

  1. 空值和null区别

    空值代表杯子是真空的,NULL代表杯子中装满了空气

  2. Red Hat 6.5 网络yum源的配置

    第一次接触Linux系统,用虚拟机安装了一个rad hat6.5版本64位的,傻瓜式安装.安装好之后简单的写了一个C代码,进行gcc编译的时候,提示没有该命令,上网查找了一下说没有安装gcc编译器,用 ...

  3. cookie与session组件

    会话跟跟踪技术 cookie介绍 Djanjo中操作Cookle Session Django中Session相关方法 Django中的Session配置 CBV中加装饰器 session中运用aja ...

  4. BBS项目(2)

    我们实现登录功能的随机验证码的产生 views.py def get_random_color(): return ( # 创建三个0-255的随机数 random.randint(0, 255), ...

  5. 如何解决Android开发中的【java.lang.unsatisfiedlinkerror findLibrary returned null.】 错误

    将脉可寻的功能加入到自己的APP中时,需要在libs文件中添加.so文件和jar包 但是,加入.so文件后,仍然报错 在一番折腾之后,终于解决了,然而解决的方法很奇异- -. 在libs下新建一个ar ...

  6. [转载]uml 类图依赖与关联的区别

    原文链接:https://www.cnblogs.com/liuzhang/archive/2013/03/17/2964095.html 最近研究设计模式,看类图有点发虚!有些关系搞的不是很清楚.所 ...

  7. 从Entity Framework的实现方式来看DDD中的repository仓储模式运用

    一:最普通的数据库操作 static void Main(string[] args) { using (SchoolDBEntities db = new SchoolDBEntities()) { ...

  8. C# WPF Application 下的文件操作

    好气哦,电脑好烂,每天花大把的时间在等电脑反应上. 没有钱买新电脑,连组台式机的钱都没有.好气哦. 啊啊啊啊文件操作是什么鬼???C++下我都懵了,C#下好多东西要学!!!我不会!我不会!我不会!!! ...

  9. 如何获得Android设备名称(ADB命令详细介绍)

    豌豆荚.360手机管家等软件可以获取android设备名称,显示在界面上,如下图: 我们自己如何来获取设备名称 呢?答案如下: 在命令行中输入“adb shell”进入shell之后,再输入“cat ...

  10. Weekly Contest 121

    984. String Without AAA or BBB Given two integers A and B, return any string S such that: S has leng ...