注意题目:y=0时,x插入到链表的最左端,一直wa在这个点上,读题能力是真的差。
双链表插入时只需要保存当前节点与下一个节点。可以避免插入时出错。
eg: int ll=y,rr=r[y]; y:当前节点,r[y]下一节点。
上代码:
#include<bits/stdc++.h>
using namespace std;
map<int,int>l,r;
int q;
int main()
{
cin>>q;
int be=-1e9-1,en=1e9+1;
l[en]=be; r[be]=en;
while(q--)
{
int op; cin>>op;
if(op==1){
int x,y; cin>>x>>y;
if(y==0)
{
l[x]=be;
r[x]=r[be];
l[r[be]]=x;
r[be]=x;
}
else{
r[x]=r[y];
l[r[y]]=x;
r[y]=x;
l[x]=y;
}
}
else{
int x; cin>>x;
r[l[x]]=r[x];
l[r[x]]=l[x];
}
}
vector<int>out;
for(int i=r[be];i!=en;i=r[i])
{
out.push_back(i);
}
cout<<out.size()<<'\n';
for(auto i:out)
{
cout<<i<<" ";
}
}