链表

单链表
头插

将x插到下标是k的点后面

将下标是k的点后面的点删掉

代码
// 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 ++ ;
}// 将下标是k的点后面的点删掉
void remove(int k)
{ne[k] = ne[ne[k]];
}
双链表
在节点a的右边插入一个数x

删除节点a

代码
void init()
{r[0] = 1;l[1] = 0;idx = 2;
}// 在节点a的右边插入一个数x
void insert_a_right(int a, int x)
{e[idx] = x;r[idx] = r[a];l[idx] = a;r[a] = idx ++ ;
}// 删除节点a
void delet_k(int a)
{l[r[a]] = l[a];r[l[a]] = r[a];
}