注意点:最后一个结点的处理。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct node{
int address,key,next;
}no[100010];
bool first[100010]={0};
vector<node> remaining,removed;
int start,numnode;
int main(){
scanf("%d%d",&start,&numnode);
for(int i=0;i<numnode;i++){
int tempadd;
scanf("%d",&tempadd);
scanf("%d%d",&no[tempadd].key,&no[tempadd].next);
no[tempadd].address=tempadd;
}
int p=start;
while(p!=-1){
if(first[abs(no[p].key)]==false){
remaining.push_back(no[p]);
first[abs(no[p].key)]=true;
}else{
removed.push_back(no[p]);
}
p=no[p].next;
}
for(int i=0;i<remaining.size();i++){
if(i!=remaining.size()-1) printf("%05d %d %05d\n",remaining[i].address,remaining[i].key,remaining[i+1].address);
else printf("%05d %d -1\n",remaining[i].address,remaining[i].key);
}
for(int i=0;i<removed.size();i++){
if(i!=removed.size()-1) printf("%05d %d %05d\n",removed[i].address,removed[i].key,removed[i+1].address);
else printf("%05d %d -1\n",removed[i].address,removed[i].key);
}
return 0;
}