1.单链表
int head, e[N], next[N], idx;
void init() {
head = -1;
idx = 0;
}
void insert(int a) {
e[++idx] = a;
next[idx] = head;
head = idx;
}
void add(int k, int a) {
e[++idx] = a;
next[idx] = next[k];
next[k] = idx;
}
void remove() {
head = next[head];
}
void remove(int k) {
next[k] = next[next[k]];
}
2.双链表
int e[N], l[N], r[N], idx;
void init() {
r[0] = 1;
l[1] = 0;
idx = 1;
}
void insert_left(int k, int x) {
e[++idx] = x;
l[idx] = l[k];;
r[idx] = k;
r[l[idx]] = idx;
l[r[idx]] = idx;
}
void insert_right(int k, int x) {
e[++idx] = x;
r[idx] = r[k];;
l[idx] = k;
r[l[idx]] = idx;
l[r[idx]] = idx;
}
void remove(int k) {
r[l[k]] = r[k];
l[r[k]] = l[k];
}