Deduplication on a Linked List
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
struct node{
int add,value,index,next,tag;
}E[maxn];
bool cmp(node a, node b){
if(a.tag!=b.tag) return a.tag > b.tag;
else{
return a.index < b.index;
}
}
int Hash[10005]={0};
int main(){
int p,n,add,value,next;
cin>>p>>n;
for(int i=0;i<maxn;i++){
E[i].tag = 0;
E[i].index = maxn;
}
for(int i=0;i<n;i++){
cin>>add>>value>>next;
E[add].add = add;
E[add].value = value;
E[add].next = next;
}
int m=0,k=0;
while(p!=-1){
if(Hash[abs(E[p].value)]==0){
E[p].tag = 1;
Hash[abs(E[p].value)]=1;
m++;
}
E[p].index = k;
p = E[p].next;
k++; //单链表中总的节点
}
sort(E,E+maxn,cmp);
for(int i=0;i<m;i++){
printf("%05d %d",E[i].add,E[i].value);
if(i!=m-1) printf(" %05d\n",E[i+1].add);
else printf(" -1\n");
}
for(int i=m;i<k;i++){
printf("%05d %d",E[i].add,E[i].value);
if(i!=k-1) printf(" %05d\n",E[i+1].add);
else printf(" -1\n");
}
return 0;
}