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; }
相关文章推荐
- L2-002. 链表去重(vector)
- 团体程序设计天梯赛L2-002 链表去重(模拟)
- L2-002. 链表去重
- L2-002. 链表去重
- L2-002. 链表去重
- L2-002. 链表去重
- L2-002. 链表去重
- L2-002. 链表去重(用两个队列来储存两个链表)
- PAT L2-002 链表去重
- L2-002. 链表去重
- L2-002. 链表去重
- L2-002. 链表去重(模拟)
- PAT L2-002. 链表去重 模拟
- L2-002. 链表去重
- 数组模拟链表运作!!L2-002. 链表去重
- L2-002. 链表去重
- L2-002. 链表去重
- PAT L2-002. 链表去重
- L2-002. 链表去重
- PAT ~ L2-002. 链表去重 (思路 + 模拟)