题目:题目详情 - L2-002 链表去重 (25 分) (pintia.cn)
大意
给定一个带整数键值的链表 L,你需要把其中绝对值重复的键值结点删掉。即对每个键值 K,只有第一个绝对值等于 K 的结点被保留。同时,所有被删除的结点须被保存在另一个链表上。例如给定 L 为 21→-15→-15→-7→15,你需要输出去重后的链表 21→-15→-7,还有被删除的链表 -15→15。
思路
首先要定义一个数据结构,然后还需要用到绝对值abs,容器
步骤一:
struct name
{
string id;
int e;
string ne;
};
mapma;
mapse;
完整代码
#include
using namespace std;
struct name
{
string id;
int e;
string ne;
};
mapma;
mapse;
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};
}
vectorans;
vectorans1;
for(int i=1;i<=n;i++)
{
auto s=ma[h];
if(se[abs(s.e)]==0)
{
se[abs(s.e)]=1;
if(ans.size()!=0)
{
ans[ans.size()-1].ne=s.id;
}
ans.push_back(s);
}
else
{
if(ans1.size()!=0)
{
ans1[ans1.size()-1].ne=s.id;
}
ans1.push_back(s);
}
if(s.ne=="-1") break;
h=s.ne;
}
ans[ans.size()-1].ne="-1";
if(ans.size()!=0)
{
ans1[ans1.size()-1].ne="-1";
}
for(auto i:ans)
{
cout<
总结
对于这类题比较难,思维和知识点上还需提升
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)