A1074. Reversing Linked List
Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elements on L. For example, given L being 1→2→3→4→5→6, if K = 3, then you must output 3→2→1→6→5→4; if K = 4, you must output 4→3→2→1→5→6.
Input Specification:
Each input file contains one test case. For each case, the first line contains the address of the first node, a positive N (<= 105) which is the total number of nodes, and a positive K (<=N) which is the length of the sublist to be reversed. The address of a node is a 5-digit nonnegative integer, and NULL is represented by -1.
Then N lines follow, each describes a node in the format:
Address Data Next
where Address is the position of the node, Data is an integer, and Next is the position of the next node.
Output Specification:
For each case, output the resulting ordered linked list. Each node occupies a line, and is printed in the same format as in the input.
Sample Input:
00100 6 4
00000 4 99999
00100 1 12309
68237 6 -1
33218 3 00000
99999 5 68237
12309 2 33218
Sample Output:
00000 4 33218
33218 3 12309
12309 2 00100
00100 1 99999
99999 5 68237
68237 6 -1
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
typedef struct NODE{
int lt, rt;
int valid;
int data, rk;
}node;
node nds[];
bool cmp(node a, node b){
if(a.valid != b.valid)
return a.valid > b.valid;
else return a.rk < b.rk;
}
bool cmp2(node a, node b){
return a.rk > b.rk;
}
int main(){
int N, K, head;
scanf("%d%d%d", &head, &N, &K);
int temp;
for(int i = ; i < N; i++){
scanf("%d", &temp);
nds[temp].lt = temp;
scanf("%d%d", &nds[temp].data, &nds[temp].rt);
}
int pt = head, cnt = ;
while(pt != -){
nds[pt].valid = ;
nds[pt].rk = cnt;
cnt++;
pt = nds[pt].rt;
}
sort(nds, nds + , cmp);
for(int i = ; i + K <= cnt; i += K){
sort(nds + i, nds + i + K, cmp2);
}
if(cnt == )
printf("-1");
for(int i = ; i < cnt; i++){
if(i < cnt - )
printf("%05d %d %05d\n", nds[i].lt, nds[i].data, nds[i + ].lt);
else printf("%05d %d -1\n", nds[i].lt, nds[i].data);
}
cin >> N;
return ;
}
总结:
1、注意链表节点的初始顺序不是读入的顺序,而是在读完之后,从给定的首地址遍历一遍的顺序。
2、静态链表题一般都会在输入中放入无效节点,需要过滤掉。注意全空的情况。
3、本题可以在第一次遍历合法节点的时候,给每个节点都编号0、1、2......,然后按照valid和节点编号排序,这样可以将所有节点聚集起来且按照链表本身的顺序依次存放。之后第二遍遍历,每K个从大到小再排一次序即可得到最终的顺序。
4、每个节点自己的地址是始终不变的。
5、只有到了最后一步才可以把所有合法节点聚集到数组前部。
6、测试点
00000 6 3
00000 1 11111
11111 2 22222
22222 3 -1
33333 4 44444
44444 5 55555
55555 6 -1
A1074. Reversing Linked List的更多相关文章
- PAT A1074 Reversing Linked List (25 分)——链表,vector,stl里的reverse
Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elem ...
- PAT甲级——A1074 Reversing Linked List
Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elem ...
- PAT_A1074#Reversing Linked List
Source: PAT A1074 Reversing Linked List (25 分) Description: Given a constant K and a singly linked l ...
- PAT1074 Reversing Linked List (25)详细题解
02-1. Reversing Linked List (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue ...
- PAT 1074 Reversing Linked List[链表][一般]
1074 Reversing Linked List (25)(25 分) Given a constant K and a singly linked list L, you are suppose ...
- pat02-线性结构1. Reversing Linked List (25)
02-线性结构1. Reversing Linked List (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, ...
- 02-线性结构3 Reversing Linked List(25 point(s)) 【链表】
02-线性结构3 Reversing Linked List(25 point(s)) Given a constant K and a singly linked list L, you are s ...
- PTA 02-线性结构3 Reversing Linked List (25分)
题目地址 https://pta.patest.cn/pta/test/16/exam/4/question/664 5-2 Reversing Linked List (25分) Given a ...
- PAT 甲级 1074 Reversing Linked List (25 分)(链表部分逆置,结合使用双端队列和栈,其实使用vector更简单呐)
1074 Reversing Linked List (25 分) Given a constant K and a singly linked list L, you are supposed ...
随机推荐
- SpringBoot日记——ElasticSearch全文检索
看到标题的那一串英文,对于新手来说一定比较陌生,而说起检索,应该都知道吧. 这个ElasticSearch目前我们的首选,他主要有可以提供快速的存储.搜索.分析海量数据的作用.他是一个分布式搜索服务, ...
- Docker 创建容器以及管理命令(三)
1. 创建 Apache 容器 [root@centos7 ~]# docker run -d -p : httpd // -d: 放入后台运行 // -p: 指定端口映射关系(第一个为本地端口.第二 ...
- c++入门之关于cin,cout以及数据流的认识
- 12.26daily_scrum
尽管最近是众多大作业集中爆发deadline的紧要关头,队员们依旧热情高涨,投入良多,纷纷为产品发布出谋划策. 具体工作: 小组成员 今日任务 工作时间 李睿琦 软件调试过程总结 2 左少辉 滑锁密码 ...
- 软件工程驻足篇章:第十七周和BugPhobia团队漫长的道别
0x01 :序言 I am a slow walker, but I never walk backwards. 成长于被爱,学着爱人 成长的故事 也是年少的星期六结束的故事 就仿佛我和BugPhob ...
- Python学习笔记——Python Number(数字)
Python Number 类型转换 int(x, y) #将x转换为一个整数,y为进制数.如 int('11',2)将二进制数的11转成十进制数的整数,结果为3 long(x, y) #将x转换为一 ...
- An internal error has occurred. Java heap space
http://stackoverflow.com/questions/11001252/running-out-of-heap-space issue: I am having a heap spac ...
- FTP Download File By Some Order List
@Echo Off REM -- Define File Filter, i.e. files with extension .RBSet FindStrArgs=/E /C:".asp&q ...
- 使用telnet模拟http请求
HTTP 首先我们需要知道http报文是由一系列的字符串组成的.然后我们来了解具体的相关事项. 方法 HTTP支持几种不同形式的请求命令,这些命令就被称为HTTP方法.每个HTTP请求报文都包含一个方 ...
- C语言删除指定文件
C语言的文件操作想必大家都多多少少的有所了解,今天为大家献上删除文件的操作方法.这里我们要用到的是remove(const T& x);x使用代表文件路径及文件名的字符常量来确定需要删除的对象 ...