#include<cstdio>
#include<set>
using namespace std;
#define M 100010
struct node{
int data,next;
}n[M];
int list1[M],list2[M];
int first,num;
set<int> s;
void printnode(int *list,int cnt){
for (int i = 0; i < cnt; i++){
printf("%.5d %d ",list[i],n[list[i]].data);
if(i!=cnt-1)
printf("%.5d\n",list[i+1]);
else
printf("-1\n");
}
}
int main(){
scanf("%d%d",&first,&num);
for (int i = 0; i < num; i++){//输入
int t;
scanf("%d",&t);
scanf("%d%d",&n[t].data,&n[t].next);
}
int p=first;
int cnt1=0,cnt2=0;
while (p!=-1){//处理,建立红黑树,每次都查找
int val=n[p].data;
val=val>0?val:-val;
if(s.count(val))
list2[cnt2++]=p;
else{
s.insert(val);
list1[cnt1++]=p;
}
p=n[p].next;
}
printnode(list1,cnt1);
printnode(list2,cnt2);
return 0;
}PAT 1097. Deduplication on a Linked List
最新推荐文章于 2020-07-27 08:55:16 发布
本文介绍了一个使用C++实现的简单程序,该程序通过读取一系列节点数据并利用红黑树(此处为简化版实现)来判断每个元素是否重复。如果元素首次出现,则将其插入到红黑树中;若已存在,则标记为重复元素。最终程序将打印出所有不重复及重复的节点。
1594

被折叠的 条评论
为什么被折叠?



