1025 反转链表
Statement
Metadata
- 作者: CHEN, Yue
- 单位: 浙江大学
- 代码长度限制: 16 KB
- 时间限制: 400 ms
- 内存限制: 64 MB
给定一个常数
输入格式
每个输入包含 1 个测试用例。每个测试用例第 1 行给出第 1 个结点的地址、结点总个数正整数
接下来有
其中 Address
是结点地址,Data
是该结点保存的整数数据,Next
是下一结点的地址。
输出格式
对每个测试用例,顺序输出反转后的链表,其上每个结点占一行,格式与输入相同。
输入样例
输出样例
Solution
#include <bits/stdc++.h>
using namespace std;
#define maxn 100000
struct node {
int add, data, next;
} vsort[maxn], vout[maxn], temp;
int main() {
map<int, node> p;
int first, N, K;
cin >> first >> N >> K;
int i, j, k;
for (i = 0; i < N; i++) {
scanf("%d%d%d", &temp.add, &temp.data, &temp.next);
p[temp.add] = temp;
}
map<int, node>::iterator it;
if (first == -1)
cout << "-1\n";
else {
int nextAdd = first;
for (i = 0; nextAdd != -1; i++, nextAdd = p[nextAdd].next) vsort[i] = p[nextAdd];
int length = i;
int right = K - 1;
for (right = K - 1, j = 0; right < length; right += K) {
for (i = right; i > right - K; i--) vout[j++] = vsort[i];
}
for (i = right - K + 1; i < length; i++) vout[j++] = vsort[i];
for (i = 0; i < length - 1; i++) {
vout[i].next = vout[i + 1].add;
printf("%05d %d %05d\n", vout[i].add, vout[i].data, vout[i].next);
}
printf("%05d %d -1\n", vout[i].add, vout[i].data);
}
}
Last update: May 4, 2022