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;
}
posted @ 2023-05-07 16:35  江韵阁  阅读(15)  评论(0)    收藏  举报