链表

单链表
头插

将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];
}