AcWing 827. 双链表 -- java 语言
原题链接
简单
作者:
dotasf
,
2025-01-26 21:07:59
,
所有人可见
,
阅读 1
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
public class Main {
private static int N = 100000 + 5;
private static int[] e = new int[N];
private static int[] l = new int[N];
private static int[] r = new int[N];
private static int idx = 0;
private static void init() {
r[0] = 1; l[1] = 0; idx = 2;
}
public static void main(String[] args) throws IOException {
init();
StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
st.nextToken(); int m = (int)st.nval;
for (int i = 0; i < m; i++) {
st.nextToken(); String op = st.sval;
if ("L".equals(op)) {
st.nextToken(); int x = (int)st.nval;
add(0, x);
} else if ("R".equals(op)) {
st.nextToken(); int x = (int)st.nval;
addLeft(1, x);
} else if ("D".equals(op)) {
st.nextToken(); int k = (int)st.nval;
del(k);
} else if ("IL".equals(op)) {
st.nextToken(); int k = (int)st.nval;
st.nextToken(); int x = (int)st.nval;
addLeft(k + 1, x);
} else if ("IR".equals(op)) {
st.nextToken(); int k = (int)st.nval;
st.nextToken(); int x = (int)st.nval;
add(k + 1, x);
}
}
for(int i = 0; i != 1; i = r[i]) {
if (i != 0) System.out.print(e[i] + " ");
}
System.out.println();
}
private static void add(int k, int x) {
e[idx] = x; r[idx] = r[k]; l[idx] = k; l[r[k]] = idx; r[k] = idx; idx++;
}
private static void addLeft(int k, int x) {
add(l[k], x);
}
private static void del(int k) {
r[l[k + 1]] = r[k + 1];
l[r[k+1]] = l[k + 1];
}
}