模拟的关键就是理解0和1是两个哑结点,r[0]第一个结点,l[1]指向真正的最后一个节点
在各种操作的时候也要维护好各节点之间的关系
//四个插入,一个删除,简化一下成通用函数
import java.util.Scanner;
public class Main{
static int N = 100010;
static int[] e = new int[N];
static int[] r = new int[N];
static int[] l = new int[N];
static int idx= 2;
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int q = sc.nextInt();
r[0] = 1;
l[1] = 0;
while(q-->0){
String opt = sc.next();
if(opt.equals("L")){
int v = sc.nextInt();
insert(0,v);
}else if(opt.equals("R")){
int v =sc.nextInt();
insert(l[1],v);
}else if(opt.equals("IL")){
int k = sc.nextInt();
int v = sc.nextInt();
insert(l[k+1],v);
}else if(opt.equals("IR")){
int k = sc.nextInt();
int v = sc.nextInt();
insert(k+1,v);
}else{
int k = sc.nextInt();
delete(k+1);
}
}
for(int i=r[0];i!=1;i=r[i]){
System.out.print(e[i]+" ");
}
}
public static void insert(int k,int v){
//统一成在k的右边进行插入操作
e[idx] = v;
r[idx] = r[k];
l[idx] = k;
l[r[k]] = idx;
r[k] = idx++;
}
public static void delete(int k){
l[r[k]] = l[k];
r[l[k]] = r[k];
}
}