题目
AC代码:
package 练习;
import java.util.*;
import java.io.*;
import java.lang.*;
import java.util.*;
public class Main {
static Scanner scanner=new Scanner(System.in);
static int l[],r[];//
static int value[];
static Set<Integer>set=new HashSet<Integer>();
public static void main(String[] args) {
int n=scanner.nextInt();
int x=0;
l=new int [n];
r=new int [n];
value=new int [n];
while(n-->0) {
String string=scanner.next();
if(string.equals("L")) {
addL(scanner.nextInt(), ++x);
}else if(string.equals("R")) {
addR(scanner.nextInt(), ++x);
}else if(string.equals("IL")) {
addIL(scanner.nextInt(), scanner.nextInt(), ++x);
}else if(string.equals("IR")) {
addIR(scanner.nextInt(), scanner.nextInt(), ++x);
}else {
D(scanner.nextInt());
}
}
// addR(8, 1);
// addR(5, 2);
// addL(4, 3);
// addIL(3, 3, 4);
//addIR(2, 8, 5);
StringBuilder stringBuilder=new StringBuilder();
//System.out.println(LNO);
int xx=LNO;
while(value[xx]!=0) {
if(!set.contains(xx))stringBuilder.append(value[xx]+" ");
xx=r[xx];
}
System.out.println(stringBuilder);
}
static int RNO;//记录最后一个
static int LNO;//记录第一个
public static void addL(int x,int NO) {
value[NO]=x;
l[LNO]=NO;//第一个的前面为最新的
r[NO]=LNO;
LNO=NO;
if(NO==1)RNO=1;
}
public static void addR(int x,int NO) {
value[NO]=x;
r[RNO]=NO;//最后一个等于新的
l[NO]=RNO;
RNO=NO;
if(NO==1)LNO=1;
}
public static void addIL(int k, int x,int NO) {
if(k==LNO)addL(x, NO);
else {
value[NO]=x;
l[NO]=l[k];//node.l=nownode.l
r[NO]=k;//node.r=nownode
r[l[k]]=NO;//nownode.l.r=node
l[k]=NO;//nownode.l=node
}
}
public static void addIR(int k,int x,int NO) {
if(k==RNO)addR(x, NO);
else {
value[NO]=x;
l[NO]=k;
r[NO]=r[k];
l[r[k]]=NO;
r[k]=NO;
}
}
public static void D(int k) {
set.add(k);
}
}