1025 反转链表

一、题目

给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转。例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为 3→2→1→6→5→4;如果 K 为 4,则输出应该为 4→3→2→1→5→6,即最后不到 K 个元素不反转。

二、输入输出

输入格式

每个输入包含 1 个测试用例。每个测试用例第 1 行给出第 1 个结点的地址、结点总个数正整数 N (≤105≤10^5≤105​​ )、以及正整数 K (≤N≤N≤N),即要求反转的子链结点的个数。结点的地址是 5 位非负整数,NULL 地址用 −1 表示。

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

Address Data Next

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

输出格式

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

三、样例

输入样例

00100 6 4
00000 4 99999
00100 1 12309
68237 6 -1
33218 3 00000
99999 5 68237
12309 2 33218

输出样例

00000 4 33218
33218 3 12309
12309 2 00100
00100 1 99999
99999 5 68237
68237 6 -1

四、题目分析

首先读入数据存入unordered_map,从头节点开始依次找到所有有效节点,存入向量。遍历向量,节点进入双端队列,每满k个,逆序存放人新的向量,最后未满k个的节点正序存放。按照格式输出lists向量。

五、代码

#include <bits/stdc++.h>
using namespace std;
struct node
{int address;int value;int next;
};
struct no
{int address;int value;
};
vector<node> nodes;
unordered_map<int, node> ump;
deque<node> deq;
vector<no> lists;
int main()
{int first_address;int node_num;int k;cin >> first_address >> node_num >> k;for (int i = 0; i < node_num; i++){node n;cin >> n.address >> n.value >> n.next;ump.insert(pair<int, node>(n.address, n));}node n;n.address = first_address;n.value = ump[first_address].value;n.next = ump[first_address].next;nodes.push_back(n);while (n.next != -1){n.address = n.next;n.value = ump[n.address].value;n.next = ump[n.address].next;nodes.push_back(n);}ump.clear();for (int i = 0; i < nodes.size();){for (int j = 0; j < k; j++){node x = nodes[i];deq.push_back(x);i++;if (i == nodes.size())break;}if (deq.size() == k){while (deq.size() != 0){no y;y.address = deq.back().address;y.value = deq.back().value;lists.push_back(y);deq.pop_back();}}}while (deq.size() < k && deq.size()){no y;y.address = deq.front().address;y.value = deq.front().value;lists.push_back(y);deq.pop_front();}for (int i = 0; i < lists.size(); i++){if (!i){printf("%05d %d ", lists[i].address, lists[i].value);}else{printf("%05d\n%05d %d ", lists[i].address, lists[i].address, lists[i].value);}}printf("-1");return 0;
}

六、总结

unordered_map
头文件: #include < unordered_map >
unordered_map内部实现了一个哈希表(也叫散列表,通过把关键码值映射到Hash表中一个位置来访问记录,查找的时间复杂度可达到O(1),其在海量数据处理中有着广泛应用)。因此,其元素的排列顺序是无序的。

PAT (Basic Level) Practice1025 反转链表相关推荐

  1. PAT (Basic Level) - 1025 反转链表(模拟)

    题目链接:点击查看 题目大意:初始时给出一条长度为n的链表,要求从头开始每k位翻转一次,最后剩下的若不足k位,则保持原顺序,如: 1->2->3->4->5->6,若k为 ...

  2. PAT (Basic Level) Practise (中文)-1025. 反转链表 (25)

    PAT (Basic Level) Practise (中文)-1025. 反转链表 (25)   http://www.patest.cn/contests/pat-b-practise/1025 ...

  3. PAT (Basic Level) Practise (中文)-1034. 有理数四则运算(20)

    PAT (Basic Level) Practise (中文)-1034. 有理数四则运算(20)  http://www.patest.cn/contests/pat-b-practise/1034 ...

  4. 【题解】PAT (Basic Level) Practice (中文)

    互联网行业的小白,写博客的目的是为了记录自己的学习过程.对自己学习中所犯的错误做一个总结.由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教! PAT Basic Level P ...

  5. PAT basic level 答案+解题思路+难点 (个人刷题记录)

    PAT basic level 使用语言:C++ 仅记录一下自己刷题过程的心得体会 永远保持更新(期待更好的解法) 可能有些题没有(那就是我还没做出来,以后会更的!) 欢迎大家与我讨论交流√ 题目序列 ...

  6. 可优化-PAT (Basic Level) Practice Python解法 1026 程序运行时间(时间进位/四舍五入Tobe解决)

    可优化-PAT (Basic Level) Practice Python解法 1026 程序运行时间(时间进位/四舍五入Tobe解决) c1, c2 = map(int,input().split( ...

  7. 1001 害死人不偿命的(3n+1)猜想 (15分) PAT (Basic Level) Practice (中文)C语言版

    PAT (Basic Level) Practice (中文) 1001 害死人不偿命的(3n+1)猜想 (15分) 卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一 ...

  8. 卡拉兹(Callatz)猜想,PAT(Basic Level) Practise NO.1001

    PAT(Basic Level) Practise NO.1001 卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把(3n+1)砍掉一半. 这样 ...

  9. PAT (Basic Level) Practice (中文)1095 解码PAT准考证 (25 分)

    PAT (Basic Level) Practice (中文)1095 解码PAT准考证 (25 分) PAT 准考证号由 4 部分组成: 第 1 位是级别,即T代表顶级:A代表甲级:B代表乙级: 第 ...

最新文章

  1. 一种清除windows通知区域“僵尸”图标的方案——问题分析
  2. 手机内存RAM、ROM简介
  3. Go的遍历map与slice的区别:map无序slice有序
  4. vue webpack打包入口文件是哪个_Vue 学习笔记(二十五):webpack 相关
  5. linux 移出权限,一起学习在 Ubuntu 上授予和移除 sudo 权限
  6. 关于oracle分组后组外排序的问题
  7. SparkSQL高并发:读取存储数据库
  8. 用数组来存储显示对象
  9. 蚂蚁、字节、拼多多,你的简历能通过几家?
  10. nodejs-ORM 框架 waterline和Sails
  11. c语言答案计算鸡兔同笼,鸡兔同笼-题解(C语言代码,思路清晰,简单易懂)
  12. voip和rtc_VOIP的发展进化史
  13. 计算机太极之光,3000多名研究生赛太极,五大太极拳流派名家展风采
  14. 第三版新视野大学英语读写教程4结业考点(1,2,3,5,6单元)
  15. 行走在数据库上的行癫(一)
  16. 解决mac下adb无法找到手机
  17. 微信支付成功后服务器宕机了,今天微信出现大面积宕机,可能与支付宝有关?...
  18. key 、primary key 、unique key 与index区别
  19. 国际顶会 SIGCOMM,我们来了!
  20. 土澳16天超级设计方案

热门文章

  1. tensorflow之卷积池化和全连接
  2. idea怎么调试jsp页面_一文学会JSP
  3. 阿里云服务器的安全组怎么创建和修改?
  4. Linux管理员权限失败su Authentication failure
  5. dsp c语言程序设计,DSP C语言程序设计.pdf
  6. nodejs 从gitlab拉下来后运行爆错解决
  7. jdbc basedao mysql_Java使用JDBC连接mysql、sqlserver、orcle数据库的baseDao类
  8. python 服务监控_promethues + python + flask监控后端服务状态
  9. winform 的exe为什么移动之后不能使用_C++MyDock配置要求、所需运行库、常见问题 初次使用必看...
  10. python3.5安装教程linux_安装Python 3.6在Ubuntu 16.04上