L2-022 重排鏈表 (25分)
AC代碼
#include <iostream>
#include <cstdio>
using namespace std;
struct node{
int cur, value, nxt;
}nodes[100010], h[100010], ret[100010], ans[100010];
int main(){
int ori, n, pos = 0, index = 0, cnt = 0;
scanf("%d%d", &ori, &n);
for (int i = 0; i < n; i++){
scanf("%d%d%d", &nodes[i].cur, &nodes[i].value, &nodes[i].nxt);
h[nodes[i].cur] = nodes[i];
}
while (true){
ret[pos++] = h[ori];
cnt++;
if (h[ori].nxt == -1) break;
ori = h[ori].nxt;
}
for (int i = 0; i < cnt/2; i++){
ans[index++] = ret[cnt-i-1];
ans[index++] = ret[i];
}
if (cnt%2) ans[index++] = ret[cnt/2];
for (int i = 0; i < index-1; i++)
printf("%05d %d %05d\n", ans[i].cur, ans[i].value, ans[i+1].cur);
printf("%05d %d -1", ans[index-1].cur, ans[index-1].value);
return 0;
}