PAT 1074. Reversing Linked List
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <unordered_map> using namespace std; class Node {
public:
int data;
int next;
Node() : data(), next() {}
Node(int d, int n):data(d), next(n){}
}; int reverse_help(int head, int k, unordered_map<int, Node>& mem) {
if (head == -) {
return -;
} int cur = head;
int prev= -;
while (cur != -) {
if (k == ) {
break;
}
int tmp = mem[cur].next;
mem[cur].next = prev;
prev = cur;
cur = tmp; k--;
}
mem[head].next = cur;
return prev;
} int reverse(int head, int k, unordered_map<int, Node>& mem, int n) {
if (head == -) {
return -;
} int nhead = -;
int cur = head;
int pre = -; while (cur != -) {
int t = reverse_help(cur, k, mem);
if (nhead == -) {
nhead = t;
}
if (pre != -) {
mem[pre].next = t;
}
pre = cur;
cur = mem[cur].next;
n -= k;
if (n < k) {
break;
}
} return nhead;
} void print(int head, unordered_map<int, Node>& mem) {
int cur = head;
while(cur != -) {
Node& cnode = mem[cur];
if (cnode.next != -) {
printf("%05d %d %05d\n", cur, cnode.data, cnode.next);
} else {
printf("%05d %d %d\n", cur, cnode.data, cnode.next);
}
cur = mem[cur].next;
}
} int count(int head, unordered_map<int, Node>& mem) {
int cnt = ;
int cur = head;
while(cur != -) {
cnt++;
cur = mem[cur].next;
}
return cnt;
} int main() { int head, n, k;
scanf("%d%d%d", &head, &n, &k); unordered_map<int, Node> mem; for (int i=; i<n; i++) {
int addr, data, next;
scanf("%d%d%d", &addr, &data, &next);
mem.insert(make_pair(addr, Node(data, next)));
} cout<<"===="<<endl;
print(head, mem);
cout<<"===="<<endl;
head = reverse(head, k, mem, count(head, mem));
print(head, mem); return ;
}
卧槽,敢再无聊点么,输入节点数据竟然有不含在链表里的节点数据。
PAT 1074. Reversing Linked List的更多相关文章
- PAT 1074 Reversing Linked List[链表][一般]
1074 Reversing Linked List (25)(25 分) Given a constant K and a singly linked list L, you are suppose ...
- PAT 1074. Reversing Linked List (25)
Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elem ...
- 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 ...
- PAT Advanced 1074 Reversing Linked List (25) [链表]
题目 Given a constant K and a singly linked list L, you are supposed to reverse the links of every K e ...
- PAT (Advanced Level) 1074. Reversing Linked List (25)
简单题. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #in ...
- PAT甲题题解-1074. Reversing Linked List (25)-求反向链表
题意说的很清楚了,这种题的话,做的时候最好就是在纸上自己亲手模拟一下,清楚一下各个指针的情况, 这样写的时候就很清楚各个指针变量保存的是什么值. PS:一次AC哈哈,所以说自己动手在纸上画画还是很有好 ...
- 【PAT甲级】1074 Reversing Linked List (25 分)
题意: 输入链表头结点的地址(五位的字符串)和两个正整数N和K(N<=100000,K<=N),接着输入N行数据,每行包括结点的地址,结点的数据和下一个结点的地址.输出每K个结点局部反转的 ...
- PAT甲级1074 Reversing Linked List (25分)
[程序思路] 先根据地址按顺序读入节点,入栈,当栈里的元素个数等于k时全部出栈,并按出栈顺序保存,最后若栈不为空,则全部出栈并按出栈的稀饭顺序保存,最后输出各节点 注意:输入的节点中有可能存在无用节点 ...
- 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 ...
随机推荐
- Linux磁盘及文件系统(二)Linux下磁盘命名和分区
在为主机添加硬盘之前,首先需要了解Linux系统下对硬盘和分区的命令方法 一.磁盘命名 Linux下对SCSI和SATA设备是以sd命名的,第一个SCSI设备是sda,第二个是sdb....以此类推. ...
- 给对象和函数添加method方法
蝴蝶书中有一个method方法,用来给函数定义方法.看了之后,想着能不能给对象也定义方法呢?. 下面的代码可以实现给函数定义方法: //Function method Function.prototy ...
- Kafka入门学习--基础
Kafka是什么 Kafka是最初由Linkedin公司开发,是一个分布式.支持分区的(partition).多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就可 ...
- JDK下载与安装、 Eclipse下载与使用的总结心得_20173311118_牛明旺
一.JDK下载与安装心得: ① 从官网http://www.oracl.com/technetwork/java上下载JDK,注意一定要同意该网站上的协议,否则下载不了(即点击“Accept Lic ...
- javascript举例介绍事件委托的典型使用场景
在了解什么是DOM事件以及给DOM事件绑定监听器的几种方法后,我们来谈谈事件委托. 1. e.target 和 e.currentTarget 当我们给目标元素target 绑定一个事件监听器targ ...
- Hibernate 连接数据库,数据库返回数据超过限制报错
1.packet for query is too large 1024 >. you can change this value on the server mysql max_allowed ...
- 后台开发面试题(.net与java)
最近面试了几家公司,发现大部分公司面试题有相似的地方.现在此记录下我还记得的一些题: JAVA部分: 1.Java Map 按Key排序和按Value排序: 参考链接:Java Map 按Key排序和 ...
- 2018南京网络赛 - Skr 回文树
题意:求本质不同的回文串(大整数)的数字和 由回文树的性质可知贡献只在首次进入某个新节点时产生 那么只需由pos和len算出距离把左边右边删掉再算好base重复\(O(n)\)次即可 位移那段写的略微 ...
- wampserver实现外网访问
1.打开运行WampServer3.0.4,鼠标移到wampserver上去,单击右键,出来个wamp Settings, 按照如图所示,选择Menu item : Online / Offline. ...
- ubuntu手动安装PhantomJS
1.切换到主目录:cd ~2.下载安装包:https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-Linux-x86_64.ta ...