您的位置:首页 > 其它

L2-002. 链表去重

2017-03-25 01:57 267 查看
//使用链表实现
//c++链表去重问题,当前元素的前一个元素和尾指针指向当前元素,遍历结束条件为!=-1
//本题注意tail=-1 就是设置尾节点的结束

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int S,N;
const int maxn=1e6+10;
struct T{
int from,val,to;
};
T np[maxn];
int vp[maxn];
int star=1e6,head=1e6+1,tail;
int main(){
cin>>S>>N;
int a,b,c;
np[star].to=S;
np[head].to=-1;
memset(vp,0,sizeof(vp));
for(int i=0;i<N;i++){
cin>>a>>b>>c;
np[a].from=a;
np[a].val=b;
np[a].to=c;
}
int u=star;
while(u!=-1&&np[u].to!=-1){
int u1=np[u].to;
if(vp[abs(np[u1].val)]){
np[u].to=np[u1].to;
if(np[head].to==-1)np[head].to=tail=u1;
else{
np[tail].to=u1;
tail=u1;
}
}
else{
vp[abs(np[u1].val)]=1;
u=np[u].to;
}
}
np[tail].to=-1;
int s1=star,s2=head;
while(np[s1].to!=-1){
int temp1=np[s1].to;
s1=np[s1].to;
printf("%05d %d ",np[temp1].from,np[temp1].val);
if(np[temp1].to!=-1)printf("%05d\n",np[temp1].to);
else printf("%d\n",np[temp1].to);
}
while(np[s2].to!=-1){
int temp1=np[s2].to;
s2=np[s2].to;
printf("%05d %d ",np[temp1].from,np[temp1].val);
if(np[temp1].to!=-1)printf("%05d\n",np[temp1].to);
else printf("%d\n",np[temp1].to);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: