目录
- [1 知识点](#1 知识点)
- [2 模板](#2 模板)
1 知识点
一般的结构体写法为,
cpp
struct BiListNode {
int val;
BiListNode *left;
BiListNode *right;
};
但我们不用这个,而用数组模拟双链表,此时,用编号为0的结点表示头结点,用编号为1的结点表示尾节点。
2 模板
cpp
const int N = 1e6 + 10;
int idx; //用来表示所有的结点下标。
int e[N], l[N], r[N]; //e[i]表示结点i的值,l[i]表示结点i的左边结点,r[i]表示结点i的右边结点。
//(1)初始化
void init() {
//结点0表示头结点,结点1表示尾节点。
r[0] = 1;
l[1] = 0;
idx = 2;
}
//(2)在结点k的右边插入数值x
void insert(int k, int x) {
e[idx] = x;
r[idx] = r[k];
l[idx] = k;
r[k] = idx;
l[r[idx]] = idx;
idx++;
}
//(3)删除结点k
void remove(int k) {
r[l[k]] = r[k];
l[r[k]] = l[k];
}