L2-002 链表去重
[题目链接]
题意
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/5894c40896b5c1e7f619fbae7ad6dfc1.png)
思路
- 先用结构题存入所有节点,再用一个map去重,去重的,然后从头节点开始,往下找节点,遇到键值的绝对值相等的就将这个节点存入到另一个数组,最后注意节点都以-1结尾
代码
#include <bits/stdc++.h>
using namespace std;
struct put{
string idx;
int e;
string ne;
};
map<string, put> ma;
map<int, int> qu;
int main()
{
string h;cin>>h;
int n;cin>>n;
for(int i=1;i<=n;i++)
{
string a,c;
int b;
cin>>a>>b>>c;
ma[a]={a, b, c};
}
vector<put> ans;
vector<put> ans1;
for (int i=1;i<=n;i++)
{
auto s=ma[h];
if (qu[abs(s.e)]==0)
{
qu[abs(s.e)]=1;
if(ans.size()!=0)
{
ans[ans.size()-1].ne=s.idx;
}
ans.push_back(s);
}
else
{
if(ans1.size()!=0)
{
ans1[ans1.size()-1].ne=s.idx;
}
ans1.push_back(s);
}
if(s.ne=="-1")
{
break;
}
h=s.ne;
}
ans[ans.size()-1].ne="-1";
if (ans1.size()!=0)
{
ans1[ans1.size()-1].ne="-1";
}
for(auto i : ans)
{
cout<<i.idx<<" "<<i.e<<" "<<i.ne<<endl;
}
for(auto i : ans1)
{
cout<<i.idx<<" "<<i.e<<" "<<i.ne<<endl;
}
return 0;
}