PAT02-线性结构3 Reversing Linked List

题目:https://pintia.cn/problem-sets/1010070491934568448/problems/1037889290772254722

先是看了牛客(https://www.nowcoder.com/questionTerminal/5f44c42fd21a42b8aeb889ab83b17ad0)的几个代码,觉得很复杂,发现问题很多,用python写内容真的不容易

后来找到一个相当简洁的代码,真心点赞,地址:https://www.liuchuo.net/archives/463

#include <iostream>
#include <algorithm>
using namespace std;
int main() {
    int first, k, n, temp;
    cin >> first >> n >> k;
    int data[100005], next[100005], list[100005];
    for (int i = 0; i < n; i++) {
        cin >> temp;
        cin >> data[temp] >> next[temp];
    }
    int sum = 0;//不一定所有的输入的结点都是有用的,加个计数器
    while (first != -1) {
        list[sum++] = first;
        first = next[first];
    }
    for (int i = 0; i < (sum - sum % k); i += k)
        reverse(begin(list) + i, begin(list) + i + k);
    for (int i = 0; i < sum - 1; i++)
        printf("%05d %d %05d\n", list[i], data[list[i]], list[i + 1]);
    printf("%05d %d -1", list[sum - 1], data[list[sum - 1]]);
    return 0;
}

反思总结:

1.对库的函数不是很熟悉。   打印常用的库,和对应的函数,最好背诵一下

2.对c++,不熟练,要常练习

猜你喜欢

转载自www.cnblogs.com/captain-dl/p/10019056.html