PTA链表去重

一、题目描述

 二、解题思路

  用map模拟这个链表,然后用vis数组去重,用两个vector存答案,一个存去重后的链表,另一个存去重的节点。

三、代码实现

 1 #include "bits/stdc++.h"
 2 using namespace std;
 3 struct node{
 4     string ts;
 5     int val;
 6     string nxt;
 7 };
 8 bool vis[10010];
 9 unordered_map <string,node> mp;
10 vector <node> tt1;
11 vector <node> tt2;
12 int main()
13 {
14     string s;
15     int num;
16     cin >> s >> num;
17     for(int i = 1;i <= num;i++){
18         string tmp,nxt;
19         int val;
20         cin >> tmp >> val >> nxt;
21         mp[tmp].ts = tmp;
22         mp[tmp].val = val;
23         mp[tmp].nxt = nxt;
24     }
25     string tmp = s;
26     string pre1,pre2;
27     while(tmp != "-1"){
28         if(vis[(abs(mp[tmp].val))])
29             tt2.push_back(mp[tmp]);
30         else{
31             vis[(abs(mp[tmp].val))] = true;
32             tt1.push_back(mp[tmp]);
33         }
34         tmp = mp[tmp].nxt;
35     }
36     int len1 = tt1.size();
37     int len2 = tt2.size();
38     for(int j = 1;j <= len1;j++){
39         if(j != len1)
40             cout << tt1[j - 1].ts << ' ' << tt1[j - 1].val << ' ' << tt1[j].ts << endl;
41         else
42             cout << tt1[j - 1].ts << ' ' << tt1[j - 1].val << ' ' << -1 << endl;
43     }
44     for(int j = 1;j <= len2;j++){
45         if(j != len2)
46             cout << tt2[j - 1].ts << ' ' << tt2[j - 1].val << ' ' << tt2[j].ts << endl;
47         else
48             cout << tt2[j - 1].ts << ' ' << tt2[j - 1].val << ' ' << -1 << endl;
49     }
50     return 0;
51 }

 

posted @ 2022-03-19 16:17  scannerkk  阅读(210)  评论(0)    收藏  举报