一维数组模拟链表
被删除的结点仍然在e数组中,因此记录一下被删除的结点的地址就可以找到其值
AcCode:
#include<bits/stdc++.h>
using namespace std;
int e[100010], ne[100010], vis[100010];
vector<int> delNode;
int main(){int N, rootAdress;cin >> rootAdress >> N;while(N--){int now, v, nx;cin >> now >> v >> nx;e[now] = v;ne[now] = nx;}int pre;for(int i = rootAdress; i != -1; i = ne[i]){if(!vis[abs(e[i])]){vis[abs(e[i])] = true;pre = i;}else{ne[pre] = ne[i];delNode.push_back(i);}}for(int i = rootAdress; i != -1; i = ne[i]){if(ne[i] != -1)printf("%05d %d %05d\n", i, e[i], ne[i]);elseprintf("%05d %d -1\n", i, e[i]);}if(delNode.size() > 0){for(int i = 0; i < delNode.size() - 1; i++){printf("%05d %d %05d\n", delNode[i], e[delNode[i]], delNode[i + 1]);}printf("%05d %d -1", delNode[delNode.size() - 1], e[delNode[delNode.size() - 1]]);}return 0;
}