单双链表
单链表
int head, e[N], ne[N], idx;
// 0 号点 e[0] 指针 ne[0] = 1; head --> 头结点下标
// e[i] --> 表示节点 i的值
// ne[i] --> 表示节点 i 的next指针
// idx --> 存储当前用到的地址,相当于指针,当前用到的点
//初始化
void init(){ head = - 1,idx = 0 ;}
//将 x 插入到头结点后面
void add_to_head(int x){
e[idx] = x, ne[idx] = head, head = idx++;
}
//将 x 插入到下标是 k 的点后面
void add(int k,int x){
e[idx] = x, ne[idx] = ne[k], ne[k] = idx++;// == ne[k] = idx, idx++;
}
//删除下标是 k 的点后面一个点删掉
void remove(int k){
ne[k] = ne[ne[k]];
}
双链表
int list[N], l[N], r[N], idx;
void init(){
r[0] = 1, l[1] = 0, idx = 2; //初始化头结点(右边指向第一个节点)和第一个节点(左边指向头结点)
}
// x 插到 k 后面
void insert(int k, int x){
list[idx] = x; l[idx] = k;
r[idx] = r[k]; //右边连接到下一个节点的左边,左边连接到上一个节点的右边
l[r[k]] = idx; //将原来两个相连接打的节点打断,连到新节点上
r[k] = idx++; //右边的左指针连接到新节点的右指针上,左边同理
}
//删除第 x 个节点
void remove(int x){
r[l[x]] = r[x], l[r[x]] = l[x];
}
注:OI蒻驹一枚,文章仅代表个人观点,如有不对,敬请指出,共同进步,谢谢。

浙公网安备 33010602011771号