您的位置:首页 > 其它

【PAT甲级】1074. Reversing Linked List (25)

2017-06-22 16:53 453 查看
直接用一个矩阵order存储节点地址,再这个矩阵上进行翻转,不知道算不算投机取巧

#include <stdio.h>
#include <iostream>
using namespace std;

struct Node {
int e;
int next;
};
Node list[100000];
void swap(int *a, int i, int j);

int main() {

int start, len, k;
cin >> start >> len >> k;

for (int i = 0; i < len; i++) {
int add, data, next;
cin >> add >> data >> next;
list[add].e = data;
list[add].next = next;
}
int *order = new int[len];
int p = 0;
for (int i = start; i != -1; i = list[i].next) {
order[p++] = i;
}

for (int i = 0; i + k - 1 < p; i += k) {
for (int j = i; j <= (2 * i + k - 1)/2; j++) {
swap(order, j, 2 * i + k - 1 - j);//注意这里多加一个i
}
}
for (int i = 0; i < p - 1; i++) {
list[order[i]].next = order[i + 1];
}
start = order[0];
list[order[p - 1]].next = -1;

int i;
for (i = start; list[i].next != -1; i = list[i].next) {
printf("%05d %d %05d\n", i, list[i].e, list[i].next);
}
printf("%05d %d %d\n", i, list[i].e, list[i].next);

return 0;
}
void swap(int *a, int i, int j) {
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
return;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: