L2-022 重排鏈表 (25分)

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章