#include<cstdio>
#include<iostream>
#include<string.h>
using namespace std;
//ne是数值 e是指针
int e[100010],l[100010],r[100010];
int idx;
int m;
// //初始化
// void init()
// {
// r[0]=1;//0表示头结点 只起代表作用无实质意义
// l[1]=0;//1表示尾结点 只起代表作用无实质意义
// idx=2;//实际上它是从2开始存储的
// }
//在下标为k的位置右边插入x
void add(int k,int x){
e[idx]=x;
l[idx]=k;
r[idx]=r[k];
l[r[k]]=idx;
r[k]=idx++;
// idx++;
}
//删除下标位置为K上的数
void remove(int k)
{
l[r[k]]=l[k];
r[l[k]]=r[k];
}
int main()
{
r[0]=1;//0表示头结点 只起代表作用无实质意义
l[1]=0;//1表示尾结点 只起代表作用无实质意义
idx=2;//实际上它是从2开始存储的
scanf("%d",&m);
// init();
while(m--)
{
string c;
cin>>c;
int k,x;
if(c=="L")
{
cin>>x;
add(0,x);
}
else if(c=="R")
{
cin>>x;
add(l[1],x);
}
else if(c=="D")
{
cin>>k;
remove(k+1);
}
else if(c=="IL")
{
cin>>k>>x;
add(l[k+1],x);
}
else
{
cin>>k>>x;
add(k+1,x);
}
}
for (int i = r[0]; i != 1; i = r[i]) cout << e[i] << ' ';
cout << endl;
return 0;
}
链接:https://www.acwing.com/solution/content/189149/
来源:AcWing
5.18--AcWing 827. 双链表
于 2023-05-18 22:42:05 首次发布