1074. Reversing Linked List (25)

题目:

https://www.patest.cn/contests/pat-a-practise/1074

大概描述:

对一一个链表,每K个节点进行reverse,然后输出

特征词:

链表

使用语言:

C++

解题思想:

再将链表存储好了之后,可以用依据链表元素值,对地址进行操作,(这基本是对链表题的通用解法,address data next,一般都是先依据关系存储到一个结构中,然后依据顺序提出address进行操作,然后依照规则输出,此时已经不需要管next了)

题目得分:

25

提交次数:

1

时间

40分钟

代码

#include<cstdio>
#include<vector>

using namespace std;
const int MAXI = 100000;
int m[MAXI][2];
vector <int> s;
int main(){
 int fir ;
 int num,k;
 int a,b,c;
 int i;
 scanf("%d %d %d",&fir,&num,&k);
 for(i = 0;i < num;i++){
 scanf("%d %d %d",&a,&b,&c);
 m[a][0] = b;
 m[a][1] = c;
 }
int r = fir;
 while(r != -1){
 s.push_back(r);
 r = m[r][1];
 }
 int len = s.size();
 a = len / k;
 int j ;
 int flg = 0;
 for(i = 0;i < a;i++){
 for(j = k * (i + 1) - 1;j >= k * i;j--){
 if(flg == 0){
 printf("%05d %d ",s[j],m[s[j]][0]);
 flg = 1;
 }
 else
 printf("%05d\n%05d %d ",s[j],s[j],m[s[j]][0]);
 }
 }
 for(i = (a) * k;i < len;i++){
 printf("%05d\n%05d %d ",s[i],s[i],m[s[i]][0]);
 }
 printf("-1");
}

运行结果

25

 成长

对于链表,在存储好基本关系后,只需要对地址处理就可以了,这一题是对之前链表处理的练习

发表评论

电子邮件地址不会被公开。 必填项已用*标注