1165 Block Reversing + 链表块翻转 + 栈
PAT题目链接:https://pintia.cn/problem-sets/994805342720868352/exam/problems/1478635841315209216
解题思路:这题用两个栈倒腾倒腾就可以了。
题解代码:
#include<iostream>
#include<stack>
using namespace std;
#define maxn 1000000
struct node {
int next, val;
} g[maxn + 5];
int start, n, k;
stack<int> s1, s2;
int main() {
cin >> start >> n >> k;
for (int i = 0; i < n; i++) {
int id;
cin >> id >> g[id].val >> g[id].next;
}
int p = start;
while (p != -1) {
s1.push(p);
p = g[p].next;
if (s1.size() && s1.size() % k == 0) {
for (int i = 0; i < k; i++) {
s2.push(s1.top());
s1.pop();
}
}
}
while (s1.size()) {
s2.push(s1.top());
s1.pop();
}
int a = s2.top();s2.pop();
while (s2.size()) {
int b = s2.top();s2.pop();
printf("%05d %d %05d\n", a, g[a].val, b);
a = b;
}
printf("%05d %d -1\n", a, g[a].val);
return 0;
}

浙公网安备 33010602011771号