题目链接

https://pintia.cn/problem-sets/994805260223102976/problems/994805296180871168

题解

第一遍没有全部AC,最后1个测试点没过,原因是题目给的结点中有可能有无效结点,所以需要重新统计节点个数。(参考链接:https://blog.csdn.net/m0_37285185/article/details/68936043

修改后全部都AC了。

整体的思路是以地址为键形成一个map,根据从第一个结点开始遍历,统计出有效结点的地址顺序(存储在数组中),最后利用reverse函数将顺序反转,最后将反转的链表输出。

// PAT BasicLevel 1025
// https://pintia.cn/problem-sets/994805260223102976/problems/994805296180871168 #include <iostream>
#include <map>
#include <algorithm>
using namespace std; class Node{
public:
int address;
int data;
int next; // 因为使用map,所以需要提供一个无参构造
Node(){}; Node(int address,int data,int next){
this->address = address;
this->data = data;
this->next = next;
}
void print(){
printf("%05d", address);
cout << ' ' << data << ' ';
if(next==-1){
printf("%d\n",next);
}else{
printf("%05d\n", next);
}
}
}; int main()
{
// 获取n、k和首结点地址
int n, k, head;
cin >> head >> n >> k; // 利用map模拟链表,获取用户输入的结点
int address,data,next;
map<int,Node> nodes;
for(int i=0;i<n;++i){
cin >> address >> data >> next;
nodes[address]=Node(address,data,next);
} // 获取结点地址的顺序并重新统计结点个数去除无效顶点
int * addressArr=new int[n];
addressArr[0] = head;
address = nodes[head].next;
int nodeCount=1;
while(address!=-1){
addressArr[nodeCount]=address;
nodeCount++;
address = nodes[address].next;
}
n=nodeCount; // 将结点地址的顺序进行反转
if (k > 1){
int *p = addressArr;
while ((addressArr + n) - p >= k)
{
reverse(p, p + k);
p += k;
}
} // 更新各结点的next
for(int i=0;i<n-1;++i){
nodes[addressArr[i]].next=addressArr[i+1];
}
nodes[addressArr[n - 1]].next=-1; // 输出反转后的链表
for (int i = 0; i < n; ++i){
nodes[addressArr[i]].print();
} // 释放内存
delete[] addressArr; //system("pause");
return 0;
}

作者:@臭咸鱼

转载请注明出处:https://www.cnblogs.com/chouxianyu/

欢迎讨论和交流!


最新文章

  1. 30秒搞定javascript作用域
  2. 将centos7打造成桌面系统
  3. Valid Parentheses 使用递归的解法
  4. CSS3动画属性animation的用法
  5. oracle PL/SQL基础编程
  6. LeetCode Permutations II (全排列)
  7. java基础(十二)常用类总结(二)
  8. php定时删除文件夹下文件(清理缓存文件)
  9. VIM快捷键(转)
  10. C语言,const
  11. 挺好用的SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面)
  12. ldap基本命令
  13. Windows下搭建Redis服务器
  14. [one day one question] nodejs require 缓存,无法检测文件变化
  15. 深入理解Mysql索引的底层数据结构 B+ Tree (2)
  16. SNMP 优秀帖子
  17. 解决微信小程序使用wxcharts在屏幕不固定问题-开发工具里也显示好了布局,为啥到真机就是乱的
  18. Android 7.0 新特性
  19. 从零开始学 Web 之 Ajax(七)跨域
  20. OpenJudge Cartesian Tree

热门文章

  1. 根据文本内容确定UILabel的高度
  2. 关于JavaScript的词法作用域及变量提升的个人理解
  3. Jenkins学习指南
  4. [转帖]nginx 80端口重定向 转发到443端口
  5. selenium开发-C#/java/Python
  6. 小白必看的Python爬虫流程
  7. drf框架的模块分析
  8. O052、Create Volume 操作 (Part III)
  9. java.sql.SQLException: Could not retrieve transaction read-only status from server 问题解决
  10. 这是一个用于判断IE浏览器版本的紧凑脚本