PAT乙级1025
2024-08-30 07:44:56
题目链接
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/
欢迎讨论和交流!
最新文章
- 30秒搞定javascript作用域
- 将centos7打造成桌面系统
- Valid Parentheses 使用递归的解法
- CSS3动画属性animation的用法
- oracle PL/SQL基础编程
- LeetCode Permutations II (全排列)
- java基础(十二)常用类总结(二)
- php定时删除文件夹下文件(清理缓存文件)
- VIM快捷键(转)
- C语言,const
- 挺好用的SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面)
- ldap基本命令
- Windows下搭建Redis服务器
- [one day one question] nodejs require 缓存,无法检测文件变化
- 深入理解Mysql索引的底层数据结构 B+ Tree (2)
- SNMP 优秀帖子
- 解决微信小程序使用wxcharts在屏幕不固定问题-开发工具里也显示好了布局,为啥到真机就是乱的
- Android 7.0 新特性
- 从零开始学 Web 之 Ajax(七)跨域
- OpenJudge Cartesian Tree
热门文章
- 根据文本内容确定UILabel的高度
- 关于JavaScript的词法作用域及变量提升的个人理解
- Jenkins学习指南
- [转帖]nginx 80端口重定向 转发到443端口
- selenium开发-C#/java/Python
- 小白必看的Python爬虫流程
- drf框架的模块分析
- O052、Create Volume 操作 (Part III)
- java.sql.SQLException: Could not retrieve transaction read-only status from server 问题解决
- 这是一个用于判断IE浏览器版本的紧凑脚本