L2-002 链表去重

 1 #include <bits/stdc++.h>
 2 #define maxn 1000005
 3 #define INF 0x3f3f3f3f
 4 using namespace std;
 5 struct node
 6 {
 7     int addres,num,nxt;
 8 }lists[maxn];
 9 int vis[maxn];
10 vector<node> ve1,ve2;
11 int main()
12 {
13     int sta,n;
14     cin>>sta>>n;
15     for(int i=0;i<n;i++)
16     {
17         int a,b,c;
18         cin>>a>>b>>c;
19         lists[a].addres=a,lists[a].num=b,lists[a].nxt=c;
20     }
21     int l,r;
22     l=sta,r=lists[sta].nxt;
23     int cnt1,cnt2;
24     cnt1=cnt2=0;
25     while(l!=-1)
26     {
27         r=lists[l].nxt;
28         int a=lists[l].num;
29         if(vis[abs(a)])
30         {
31             ve2.push_back(lists[l]);
32             cnt2++;
33             ve1[cnt1-1].nxt=lists[l].nxt;
34             l=lists[l].nxt;
35         }
36         else
37         {
38             vis[abs(a)]=1;
39             ve1.push_back(lists[l]);
40             cnt1++;
41             l=lists[l].nxt;
42 
43         }
44     }
45     for(auto it:ve1)
46     {
47         if(it.nxt!=-1)  printf("%05d %d %05d\n",it.addres,it.num,it.nxt);
48         else printf("%05d %d %d\n",it.addres,it.num,it.nxt);
49     }
50     for(int i=0;i<cnt2-1;i++)
51     {
52         printf("%05d %d %05d\n",ve2[i].addres,ve2[i].num,ve2[i+1].addres);
53     }
54     printf("%05d %d %d",ve2[cnt2-1].addres,ve2[cnt2-1].num,-1);
55     return 0;
56 }
View Code

 

posted @ 2019-03-28 22:44  mile-star  阅读(122)  评论(0编辑  收藏  举报