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. linux换行PHP_EOL

    $file = 'log.txt';file_put_contents($file,$param.PHP_EOL,FILE_APPEND);

  2. C# 实现对PPT编辑

    C# Presentation 文本替换 我们可以通过插入占位符的方式,使用新的字词替换已有幻灯片里的文字. 本文将详细描述如何使用Spire.Presentation 来替换Prsentation ...

  3. 用nodejs搭建最简单、轻量化的http server(转)

    出处:http://www.cnblogs.com/wangfupeng1988/p/4143996.html 1. 引言 前端程序猿主要关注的是页面,你可能根本就用不到.net,java,php等后 ...

  4. java.lang.ClassNotFoundException: org.springframework.orm.hibernate3.LocalSessionFactoryBean

    Caused by: java.lang.ClassNotFoundException: org.springframework.orm.hibernate3.LocalSessionFactoryB ...

  5. java调用linux管道信息的误区

    String cmd = "ps -ef | grep "XXX" " 使用Runtime rt = Runtime.getRuntime();类时 rt.ex ...

  6. 敏捷开发之XP

    敏捷方法论有一个共同的特点,那就是都将矛头指向了“文档”,它们认为传统的软件工程方法文档量太“重”了,称为“重量级”方法,而相应的敏捷方法则是“轻量级”方法.正是因为“轻量级”感觉没有什么力量,不但不 ...

  7. 使用#include消除重复代码

    消除重复代码代码很多种,比如: 1)提炼成函数复用 2)使用宏 3)继承 4)使用闭包(boost::bind.boost::function) 上述是最为常用的,对于C++程序,闭包可能用得相对少一 ...

  8. maven-plugins说明

    maven提供了丰富的plugins. maven是一个插件执行的框架. 核心部分的描述: clean. clean插件. goal:clean 清除构建时生成的文件,文件目录 project.bui ...

  9. [LeetCode 题解]: Add Two Numbers

    You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...

  10. 优化案例--改写IN条件为INNER JOIN

    --====================================== --原始语句 SET STATISTICS IO ON SELECT COUNT(DISTINCT parent_co ...