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++,不熟练,要常练习