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 }
本文来自博客园,作者:{scanner},转载请注明原文链接:{https://home.cnblogs.com/u/scannerkk/}