单链表
#include <iostream>
using namespace std;
const int N = 100010;
int val[N]; // 记录数据
int ne[N]; // 记录 val[i] 的下一个数的下标
int head; // 记录第一个数下标
int idx; // 记录当前已经用到哪个点
// 初始化
void init()
{
head = -1;
idx = 0;
}
// 在表头插入一个数
void insert(int x)
{
val[idx] = x;
ne[idx] = head;
head = idx;
idx++;
}
// 将 x 插入下标是k的点后面
void add(int x, int k)
{
val[idx] = x;
ne[idx] = ne[k];
ne[k] = idx;
idx++;
}
// 将下标是 k 的点后面的点删掉,k >= 0
void remove(int k)
{
ne[k] = ne[ne[k]];
}
// 删除第一个数
void remove()
{
head = ne[head];
}
int main()
{
return 0;
}
双链表
#include <iostream>
using namespace std;
const int N = 100010;
int val[N]; // 存储值
int l[N]; // 节点的左指针
int r[N]; // 节点的右指针
int idx;
void init()
{
// 0 表示左端点,1 表示右端点
r[0] = 1;
l[1] = 0;
idx = 2;
}
// 在下标为 k 的点的右边插入一个数
void add(int k, int x)
{
val[idx] = x;
l[idx] = k;
r[idx] = r[k];
l[r[k]] = idx;
r[k] = idx;
idx++;
}
// 删除下标为 k 的点
void remove(int k)
{
r[l[k]] = r[k];
l[r[k]] = l[k];
}
int main()
{
return 0;
}