当遇到重复元素时,将这个结点插入l并且l1中最后一个结点的next值应被修改为当前结点的next值,l2最后一个结点的next值为当前结点的address。
注意点:
代码:
#include<iostream>
#include<set>
#include<map>
#include<vector>
using namespace std;
const int N = 100005;
typedef pair<int,int>PII;
struct Node{
int a,b,c;
};
set<int>S;
PII nod[N];
vector<Node>l1,l2;
int pos,n;
int a,b,c;
int main()
{
cin>>pos>>n;
for(int i=1;i<=n;++i)
{
cin>>a>>b>>c;
nod[a]={b,c};
}
while(pos!=-1)
{
a=pos;
b=nod[pos].first;
c=nod[pos].second;
if(!S.count(abs(b)))
{
//如果这个结点没重复,那么在表1插入这个结点
l1.push_back({a,b,c});
}
else
{
//如果这个结点重复了,那么在表2插入这个结点
//修个表1最后一个结点的next结点,为当前结点的next
//修改表2最后一个结点的next结点,为当前结点的address
if(!l2.empty()) (l2.end()-1)->c=a; //注意表2为空表
l2.push_back({a,b,c});
(l1.end()-1)->c=c;
}
S.insert((abs(b)));
pos=c;
}
for(auto x : l1)
{
if(x.c==-1) printf("%05d %d -1
",x.a,x.b);
else printf("%05d %d %05d
",x.a,x.b,x.c);
}
if(!l2.empty()) (l2.end()-1)->c=-1; //注意表2为空表
for(auto x : l2)
{
if(x.c==-1) printf("%05d %d -1
",x.a,x.b);
else printf("%05d %d %05d
",x.a,x.b,x.c);
}
return 0;
}
要判断l2是否为空
当遇到不重复的元素时,将这个结点插入l1;
文章为作者独立观点,不代表股票交易接口观点