给定一个单链表 L,我们将每 K 个结点看成一个区块(链表最后若不足 K 个结点,也看成一个区块),请编写程序将 L 中所有区块的链接反转。例如:给定 L 为 1→2→3→4→5→6→7→8,K 为 3,则输出应该为 7→8→4→5→6→1→2→3

输入格式:
每个输入包含 1 个测试用例。每个测试用例第 1 行给出第 1 个结点的地址、结点总个数正整数 N (≤10^5)、以及正整数 K (≤N),即区块的大小。结点的地址是 5 位非负整数,NULL 地址用 −1 表示。

接下来有 N 行,每行格式为:

Address Data Next

其中 Address 是结点地址,Data 是该结点保存的整数数据,Next 是下一结点的地址。

输出格式:
对每个测试用例,顺序输出反转后的链表,其上每个结点占一行,格式与输入相同。

输入样例:

00100 8 3
71120 7 88666
00000 4 99999
00100 1 12309
68237 6 71120
33218 3 00000
99999 5 68237
88666 8 -1
12309 2 33218

输出样例:

71120 7 88666
88666 8 00000
00000 4 99999
99999 5 68237
68237 6 00100
00100 1 12309
12309 2 33218
33218 3 -1

|代码长度限制 | 时间限制 | 内存限制 |
| 16KB | 400ms | 64MB |

代码:

#include<bits/stdtr1c++.h>
using namespace std;
struct node {int adress, data, next;
} N[100005];
vector<node> v1, v2;
int main() {int first, n, k;cin >> first >> n >> k;for (int i = 0, t; i < n; i++) {cin >> t;N[t].adress = t;cin >> N[t].data >> N[t].next;}while (first != -1) {v1.emplace_back(N[first]);first = N[first].next;} //使链表有序int t = int(v1.size()) / k, cnt = 0, j = 0;vector<node> List[t + 1]; //使用二维数组对序列进行分组,方便后面反转for (int i = 0; i < int(v1.size()); i++) {List[j].emplace_back(v1[i]);cnt++;if (cnt == k) {cnt = 0, j++; //当cnt与k相等时进入下一组}}for (int a = j; a >= 0; a--) { //反转操作for (int b = 0; b < int(List[a].size()); b++) {v2.emplace_back(List[a][b]); //将反转的序列元素加入v3中}}int len = v2.size();for (int i = 0; i < len; i++) {if (i !=  len - 1) v2[i].next = v2[i + 1].adress; //重新调整每个节点的当前地址和后继地址else v2[i].next = -1;}for (int i = 0; i < len; i++) {if (i != len - 1) printf("%05d %d %05d\n", v2[i].adress, v2[i].data, v2[i].next);else printf("%05d %d -1", v2[i].adress, v2[i].data);}return 0;
}

PTA乙级 1110 区块反转——25分相关推荐

  1. PAT乙级 1110 区块反转 (25 分) C++

    1110 区块反转 (25 分) 给定一个单链表 L,我们将每 K 个结点看成一个区块(链表最后若不足 K 个结点,也看成一个区块),请编写程序将 L 中所有区块的链接反转.例如:给定 L 为 1→2 ...

  2. PAT 1110 区块反转 (25 分) c语言

    链表题欸,继续偷懒就可以了.需要注意一下最后一个测试点,其中存在链表以外的节点,因此链表长度需要重新计算. 题目: 1110 区块反转 (25 分) 给定一个单链表 L,我们将每 K 个结点看成一个区 ...

  3. C++学习之路 | PTA乙级——1090 危险品装箱 (25 分)(精简)

    1090 危险品装箱 (25 分) 集装箱运输货物时,我们必须特别小心,不能把不相容的货物装在一只箱子里.比如氧化剂绝对不能跟易燃液体同箱,否则很容易造成爆炸. 本题给定一张不相容物品的清单,需要你检 ...

  4. C++学习之路 | PTA乙级—— 1070 结绳 (25 分)(精简)

    1070 结绳 (25 分) 给定一段一段的绳子,你需要把它们串成一条绳.每次串连的时候,是把两段绳子对折,再如下图所示套接在一起.这样得到的绳子又被当成是另一段绳子,可以再次对折去跟另一段绳子串连. ...

  5. C++学习之路 | PTA乙级—— 1060 爱丁顿数 (25 分)(精简)

    1060 爱丁顿数 (25 分) 英国天文学家爱丁顿很喜欢骑车.据说他为了炫耀自己的骑车功力,还定义了一个"爱丁顿数" E ,即满足有 E 天骑车超过 E 英里的最大整数 E.据说 ...

  6. C++学习之路 | PTA乙级—— 1050 螺旋矩阵 (25 分)(精简)

    1050 螺旋矩阵 (25 分) 本题要求将给定的 N 个正整数按非递增的顺序,填入"螺旋矩阵".所谓"螺旋矩阵",是指从左上角第 1 个格子开始,按顺时针螺旋 ...

  7. C++学习之路 | PTA乙级—— 1030 完美数列 (25 分)(精简)

    1030 完美数列 (25 分) 给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列. 现在给定参数 p 和一些正整数,请你从中选择尽可 ...

  8. C++学习之路 | PTA乙级—— 1015 德才论 (25分)(精简)

    1015 德才论 (25分) 宋代史学家司马光在<资治通鉴>中有一段著名的"德才论":"是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人 ...

  9. 【PAT (Basic Level) Practice】——【链表处理】1110 区块反转

    文章目录 一[题目难度] 二[题目编号] 三[题目描述] 四[题目示例] 五[解题思路] 六[最终得分] 七[代码实现] 八[提交结果] 一[题目难度] 乙级 二[题目编号] 1110 区块反转 (2 ...

最新文章

  1. 数字电视接口(HDMI,DVI)
  2. 从零开始制作自己的podspec
  3. HDOJ 1316 How Many Fibs?
  4. 1、cocos2dx开发学习第一篇-项目工程的创建
  5. html不换行溢出省略号代替,css控制不溢出,不换行,溢出部分省略号显示
  6. arthas使用示例:profiler火焰图(CPU)
  7. 第 8 章:管理模式对象
  8. python读文件en_python 点云las、laz文件的读取、写入、压缩
  9. POI 方式-excle 表格导出实现-java-poi
  10. 不拘一格!清华将致力于培养顶尖数学家
  11. 证明谷歌 Go 魅力的 10 个开源项目
  12. Android自定义控件学习(七)-------优化视图
  13. 队列消息在html中怎么排列,Redis实现消息队列
  14. Mongoose源码分析之--简单的服务器搭建(C语言)
  15. ajax post提交到SpringMVC的Controller并将处理结果传递到前台输出总结(1)
  16. struts的体系结构
  17. RSync实现文件备份同步,rsync服务器
  18. 动易和php,国内主流CMS对比之织梦内容管理系统VS动易
  19. Android系统下扫描枪的设置
  20. PCL:点云数据(*.pcd)文件格式详解

热门文章

  1. Windows取证——隐藏术
  2. 六问 Kafka 为啥那么牛!
  3. 初链—区块链混合共识的领航者
  4. 新版12306信息服务器,新版12306初体验来了!
  5. win下bat批量重命名文件
  6. Java位运算不一定比乘法快 (关于java数据运算的一些思考)
  7. 利用Keras开发用于分类问题的双向LSTM及与LSTM性能的比较
  8. Python-代码封装思想
  9. DIY自己的TIPTOP显示界面
  10. Google TPU的发展历程与思考(二)