
#include<iostream>
using namespace std;
const int N = 100010;
int val[N],le[N],ri[N];
int idx;
int n,m;
//初始化 ri[0] 和 le[1]分别为双链表的左右端点
void init(){
ri[0] = 1, le[1] = 0;
idx = 2;
}
//在节点k的右侧插入一个数
void add(int k,int x){
val[idx] = x;
ri[idx] = ri[k];
le[idx] = k;
le[ri[k]] = idx;
ri[k] = idx;
idx++;
}
//删除节点k
void del(int k){
le[ ri[k] ] = le[k];
ri[ le[k] ] = ri[k];
}
int main(){
cin>>n;
string ch;
init();
int k,x;
while(n--){
cin>>ch;
if(ch == "L"){
cin>>x;
add(0,x);
}
if(ch == "R"){
cin>>x;
add(le[1],x);
}
if(ch == "D"){
cin>>x;
del(x+1);
}
if(ch == "IL"){
cin>>k>>x;
add(le[k+1],x);
}
if(ch == "IR"){
cin>>k>>x;
add(k+1,x);
}
}
for(int i = ri[0] ; i != 1 ; i = ri[i]){
cout<<val[i]<<" ";
}
cout<<endl;
return 0;
}
来源:https://www.cnblogs.com/Flydoggie/p/12244510.html