AcWing 826. 数组模拟单链表
原题链接
简单
作者:
YYC
,
2020-07-28 08:23:19
,
所有人可见
,
阅读 447
import java.io.*;
import java.util.*;
public class Main{
private static int N = 100010;
private static int head; // 表示头结点的下标
private static int[] e = new int[N]; // 表示结点i的值
private static int[] ne = new int[N]; // 表示结点i的next指针
private static int idx; // 表示下一个可用结点
private static void init(){
head = -1;
idx = 0;
}
// 将val插到头结点
private static void addToHead(int val){
e[idx] = val; ne[idx] = head; head = idx++;
}
// 将val插到第k个插入的点后面
private static void add(int k, int val){
e[idx] = val; ne[idx] = ne[k]; ne[k] = idx++;
}
// 删除第k个插入结点的后一个结点
private static void remove(int k){
ne[k] = ne[ne[k]];
}
public static void main(String... args) throws IOException {
BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
int m = Integer.parseInt(r.readLine());
init();
while (m-- > 0){
String[] s = r.readLine().split(" ");
if (s[0].equals("H")){
int val = Integer.parseInt(s[1]);
addToHead(val);
} else if (s[0].equals("I")){
int k = Integer.parseInt(s[1]);
int val = Integer.parseInt(s[2]);
add(k - 1, val);
} else {
int k = Integer.parseInt(s[1]);
if (k == 0) {
head = ne[head];
} else {
remove(k - 1);
}
}
}
for (int i = head; i != -1; i = ne[i]){
System.out.print(e[i] + " ");
}
}
}