PAT 乙级-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)、以及正整数K(<=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
题目大意:题目给出一条n个节点的链表,以及一个整数k,要求将链表中每k个节点反转输出,剩余不足k个的节点顺序输出。
主要思路:此题用数组来存放链表的每个节点,每个节点包含地址,值,下一个地址,由于输入的节点并不是按顺序的,所以需要用一个数组接收所有的输入,然后根据首节点将所有节点按顺序放入一个新的数组(这里注意输入中可能会有无效的节点,所以链表长需要重新计算)。然后利用循环,在每个周期内倒序输出节点,除首节点外,每个节点需要输出两次自己的地址,第一次表示的是前一个节点的next。( 如果利用c++
algorithm头文件里面的reverse函数可以使代码更简单,对顺序放置链表的数组每k个节点进行倒置,然后通过一次遍历顺序输出所有节点)
#include <stdio.h>
struct node {
int ad;
int val;
int next;
} node1[100000], node2[100000];
int main(void) {
int first, count, k, i, j;
int n = 0; //节点数量,输入中可能有无效节点,n <= count
int m, r;
struct node x;
scanf("%d%d%d", &first, &count, &k);
for (i = 0; i < count; i++) {
scanf("%d%d%d", &x.ad, &x.val, &x.next);
node1[x.ad] = x;
}
for (i = 0, j = first; j != -1; j = node1[j].next, i++) {
node2[i] = node1[j];
n++; //节点数量需要重新计算
}
m = n / k; //周期数
r = n % k; //剩余不足一周期的节点数(正序输出)
//先把需要倒序的m个周期节点输出
for (i = 0; i < m; i++) {
for (j = (i+1)*k-1; j >= i*k; j--) {
//首节点只需要输出该节点地址和值
if (j == k-1)
printf("%05d %d ", node2[j].ad, node2[j].val);
//其余节点要输出两次地址(其中一次作为上一个的next)和一次值
else
printf("%05d\n%05d %d ", node2[j].ad, node2[j].ad, node2[j].val);
}
}
//处理剩余正序输出的r个节点
for (j = m * k; j < n; j++) {
//当 n < k 时,全部正序输出,首节点只需输出一个地址
if (j != 0) printf("%05d\n", node2[j].ad);
printf("%05d %d ", node2[j].ad, node2[j].val);
}
printf("-1\n"); //尾节点的next
return 0;
}
PAT 乙级-1025 链表反转的更多相关文章
- PAT乙级1025
题目链接 https://pintia.cn/problem-sets/994805260223102976/problems/994805296180871168 题解 第一遍没有全部AC,最后1个 ...
- PAT乙级 1025. 反转链表 (25)
1025. 反转链表 (25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一个常数K以及一个单链表L,请 ...
- P 1025 链表反转
转跳点:
- PAT乙级真题及训练题 1025. 反转链表 (25)
PAT乙级真题及训练题 1025. 反转链表 (25) 感觉几个世纪没打代码了,真是坏习惯,调了两小时把反转链表调出来了,心情舒畅. 这道题的步骤 数据输入,数组纪录下一结点及储存值 创建链表并储存上 ...
- PAT甲级专题|链表
PAT链表专题 关于PAT甲级的链表问题,主要内容 就是"建立链表" 所以第一步学会模拟链表,pat又不卡时间,这里用vector + 结构体,更简洁 模拟链表的普遍代码 cons ...
- 链表反转leetcode206
最近准备结束自己的科研生涯,准备要开始找工作了,准备在LEETCODE刷刷题...刷的前40题全部用python刷的,各种调包速度奇快,后被师哥告知这样没意义,于是准备开始回归C++,Python用的 ...
- 链表反转 (Multi-method)
链表反转是链表相关问题最基础的知识,做完LeetCode中LinkedList后才会有这种体会,因为ACM算法中不会涉及这一部分.解决这一问题有多种方法,在面试中面试官通常也会要求写出多种.包括sta ...
- java实现单链表反转
一.简介 经查阅,主要有两种方法实现链表反转,递归反转法和遍历反转法: 递归: 在反转当前结点之前先反转其后边的结点,即.从尾结点开始逆向反转各个节点的指针域指向: 遍历:从前往后反转各个结点的指针域 ...
- C++ 单向链表反转
单向链表反转,一道常见的面试题,动手实现下. #include "stdafx.h" #include <stdlib.h> struct Node{ int data ...
随机推荐
- OpenCV学习(4)——动态结构
学习一个新知识,无外乎学习它本身和它的工具.OpenCV提供许多内置的结构及处理函数,非常值得学习. 内存存储 在OpenCV中,内存存储器是一个可以用来存储序列.数组和图像的动态增长的数据结构.它由 ...
- Linux发送邮件命令mail,mutt
邮件常常是Linux下监控报警手段之一.Linux下的mail命令可以方便,快速的完成发送邮件. 1. Linux发邮件2种常见客户端命令 1.1 mail命令(推荐) 语法: 无邮件正文 mail ...
- VS2013 配置全局 VC++目录
原文链接:https://blog.csdn.net/humanking7/article/details/80391914 也许是我VS2013安装的有问题,每次编译程序都要去 项目属性页-> ...
- Failed building wheel for cytoolz
2019独角兽企业重金招聘Python工程师标准>>> 当我使用 pip instlal cytoolz 时, 报以下错误: error: Microsoft Visual C++ ...
- 《Arduino实战》——2.4 反应速度计:谁真正拥有最快的反应时间
本节书摘来异步社区<Arduino实战>一书中的第2章,第2.4节,作者:[美]Martin Evans ,Joshua Noble ,Jordan Hochenbaum,更多章节内容可以 ...
- IDC:企业需求疲软 第三季度全球服务器市场收入下滑7%
根据IDC全球服务器季度追踪报告,2016年第三季度全球服务器市场同比减少7%至125亿美元.整个服务器市场的增长最近有所放缓,部分原因是超大规模数据中心增长放缓,以及受到高端服务器销售下滑的拖累.此 ...
- AngularJS学习1-基础知识
Angular并不是适合任何应用的开发,Angular考虑的是构建CRUD应用 但是目前好像也只是用到了angular的一些指令,数据绑定,mvc,http服务而已..... 以前传统的做法就是,通过 ...
- bfs—Dungeon Master—poj2251
Dungeon Master Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 32228 Accepted: 12378 ...
- Android FrameWork学习(二)Android系统源码调试
通过上一篇 Android FrameWork学习(一)Android 7.0系统源码下载\编译 我们了解了如何进行系统源码的下载和编译工作. 为了更进一步地学习跟研究 Android 系统源码,今天 ...
- 域名系统(DNS)初探
1.定义 域名:又称网域,是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称(如mail.cctv.com),用于在数据传输时对计算机的定位标识(有时也指地理位置): 域名系统 ...