数组模拟单链表
val [n] 表示第 n 个点的值, ne [n] 表示第 n 个点指向的点的下标。 head 表示头节点下标,idx为当前节点下标,空节点下标设为-1。
//初始化
void init()
{
head=-1;
idx=0;
}
//在链表头部添加元素
void add_to_head(int x)
{
ne[idx]=head;
val[idx]=x;
head=idx;
idx++;
}
//在下标为k的节点后添加元素
void add(int k,int x)
{
ne[idx]=ne[k];
val[idx]=x;
ne[k]=idx;
idx++;
}
//移除下标为k的下一个元素
void remove(int k,int x)
{
ne[k]=ne[ne[k]];
}
数组模拟双链表
val [n] 表示第 n 个点的值, l [n] 表示第 n 个点左边节点的下标, r [n] 表示第 n 个点右边节点的下标。 head 的下标为0, tail 的下标为1, idx为当前节点下标。
//初始化
void init()
{
r[0]=1;
l[1]=0;
idx=2;
}
//将x加到第k个节点的右边
void add(int k,int x)
{
r[idx]=r[k];
l[idx]=k;
val[idx]=x;
l[r[k]]=idx;
r[k]=idx;
idx++;
}
//删除第k个节点
void remove(int k)
{
r[l[k]]=r[k];
l[r[k]]=l[k];
}