给定一个单链表 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 (≤105)、以及正整数 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

分析:L为输入链表,ans为答案链表,二维数组E为区块链表。先将链表数据记录在结构体A中,遍历A将链表正确顺序记录在链表L中,然后需要重新定义链表长度n(因为有输入中有无效的假结点信息)。遍历链表L,将每K个结点所分隔成的区块保存在二维数组E中,再从后往前将区块链表E中的值添加到答案链表ans中,最后根据格式输出ans链表就好啦~

#include <iostream>
#include <vector>
using namespace std;
struct node {int data, next;
}A[100001];
vector<int> L, ans, E[100001];
int s, n , a, t, k, mark, cnt, c;
int main() {cin >> s >> n >> k;for (int i = 0; i < n; i++) {cin >> a;cin >> A[a].data >> A[a].next;}t = s;while (t != -1) {L.push_back(t);t = A[t].next;}n = L.size();for (int i = 0; i < n; i++) {E[c].push_back(L[i]);cnt++;if (cnt == k && i != n - 1) {cnt = 0;c++;}}for (int i = c; i >= 0; i--)for (auto it : E[i]) ans.push_back(it);for (int i = 1; i < n; i++) printf("%05d %d %05d\n", ans[i - 1], A[ans[i - 1]].data, ans[i]);printf("%05d %d -1", ans.back(), A[ans.back()].data);return 0;
}

1110 区块反转 – PAT乙级真题相关推荐

  1. 【PTA】 PAT乙级真题,95题(C++,AC代码)

    PAT乙级真题95题 标号 标题 分数 通过数 提交数 通过率 1001 害死人不偿命的(3n+1)猜想 15 109558 309119 0.35 1002 写出这个数 20 71739 28156 ...

  2. PAT乙级真题1058 || 选择题(详解,C/C++示例,测试点分析)

    [欢迎关注微信公众号:计算机黑科学大全,对话框回复:PAT乙级真题]获取全部真题详解及代码示例 个人博客地址:https://mzwang.top 选择题 题目描述: 批改多选题是比较麻烦的事情,本题 ...

  3. 1085 PAT单位排行 (25分)-PAT乙级真题-C++实现

    1085 PAT单位排行 (25分)-PAT乙级真题-C++实现 题目描述: 每次 PAT 考试结束后,考试中心都会发布一个考生单位排行榜.本题就请你实现这个功能. 输入格式: 输入第一行给出一个正整 ...

  4. PAT乙级真题1089 || 狼人杀-简单版(详解,C/C++示例,测试点分析)

    [欢迎关注微信公众号:计算机黑科学大全,在对话框回复:PAT乙级真题]获取全部真题详解及代码示例,邀请大家加入PAT算法刷题交流qq群:821388108 个人博客:https://mzwang.to ...

  5. 1110、区块反转 PAT乙级

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

  6. 「PAT乙级真题解析」Basic Level 1033 旧键盘打字 (问题分析+完整步骤+伪代码描述+提交通过代码)

    乙级的题目训练主要用来熟悉编程语言的语法和形成良好的编码习惯和编码规范.从小白开始逐步掌握用编程解决问题. PAT乙级BasicLevelPractice 1033 问题分析 题目设定了一个场景: 有 ...

  7. 「PAT乙级真题解析」Basic Level 1072 开学寄语 (问题分析+完整步骤+伪代码描述+提交通过代码)

    乙级的题目训练主要用来熟悉编程语言的语法和形成良好的编码习惯和编码规范.从小白开始逐步掌握用编程解决问题. PAT乙级BasicLevelPractice 1072 开学寄语 问题分析 题设要求查找学 ...

  8. 「PAT乙级真题解析」Basic Level 1053 住房空置率 (问题分析+完整步骤+伪代码描述+提交通过代码)

    乙级的题目训练主要用来熟悉编程语言的语法和形成良好的编码习惯和编码规范.从小白开始逐步掌握用编程解决问题. PAT乙级BasicLevelPractice 1053 问题分析 题设要求统计符合住房空置 ...

  9. 「PAT乙级真题解析」Basic Level 1004 (问题分析+完整步骤+伪代码描述+提交通过代码)

    乙级的题目训练主要用来熟悉编程语言的语法和形成良好的编码习惯和编码规范.从小白开始逐步掌握用编程解决问题. PAT乙级BasicLevelPractice 1004 需求分析 思路一: 以终为始分解需 ...

最新文章

  1. 域迁移(降级)注意事项
  2. DL之RBM:基于RBM实现手写数字图片识别提高准确率
  3. 阿里云今日发布数据库产品HybridDB
  4. DCMTK:将DICOM结构化报告文件的内容转换为XML格式
  5. mysql三大范式 答案_数据库三大范式的个人理解~!
  6. 在Android App中集成Google登录
  7. delphi 执行长时间存储过程 显示进度_项目管理_十大管理体系之「项目进度管理」知识整理及心得分享...
  8. pycharm vim 插件IdeaVIM
  9. 学习Vim 全图解释
  10. VS2010中编写x64汇编的具体方法
  11. Golang关于channel死锁情况的汇总以及解决方案
  12. 让AI自动调参,才是百度无人车的进化方式:适应环境全靠自己 | 论文
  13. vscode的eslint无效_VSCode配置eslint
  14. Win32汇编学习笔记(罗云彬)(一)
  15. 【Python】使用Labelme标注自己的数据集并由json生成Ground Truth
  16. 怎样用计算机制作思维导图,手把手教你如何用电脑绘制思维导图
  17. 单行横向滑动的日历calendar控件
  18. Android 自动化操作,辅助功能无障碍,在其他应用的上层显示
  19. 机器人战争显示服务器连接,战争机器人总是显示无法连接网络
  20. python count函数时间复杂度_Python之时间复杂度

热门文章

  1. 用ChatGPT 辅导复杂数学作业
  2. 天猫延迟发货的定义是什么?延迟发货商家如何赔付?
  3. coldfusion_通过ColdFusion发送已读回执
  4. C++ 所有GetLastError返回错误码代表的意思
  5. “李鬼”公司擅自使用“银联”字号 法院判其更名并赔偿10万元
  6. linux usb 键盘 内核配置文件,Linux 内核USB 驱动
  7. 人脸课堂签到管理系统
  8. 2021初级消防员考试模拟题库火灾报警知识部分
  9. string头文件函数用法大总结
  10. 树莓派爱好者基地64位系统2.0正式版说明及介绍