單鏈表 —— 模板題 AcWing 826. 單鏈表
單鏈表----鄰接表(用來在存儲圖和樹)
// head存儲鏈表頭
//e[]存儲節點的值
//ne[]存儲節點的next指針
//idx表示當前用到了哪個節點
int head, e[N], ne[N], idx;
// 初始化
void init()
{
head = -1;
idx = 0;
}
// 在鏈表頭插入一個數x
void insert(int x)
{
e[idx] = x;
ne[idx] = head;
head = idx;
idx++;
}
//把x插入到下標是k的點後面
void add(int k,int x){
e[idx]=x;
ne[idx]=ne[k];
ne[k]=idx;
idx++;
}
//將下標是k的點的後面一個點刪除
void del(int k){
ne[k]=ne[ne[k]];
}
// 將頭結點刪除,需要保證頭結點存在
void del_herad()
{
head = ne[head];
}
雙鏈表 —— 模板題 AcWing 827. 雙鏈表
// e[]表示節點的值,l[]表示節點的左指針,r[]表示節點的右指針,idx表示當前用到了哪個節點
int e[N], l[N], r[N], idx;
// 初始化
void init()
{
//0是左端點,1是右端點
r[0] = 1, l[1] = 0;
idx = 2;
}
// 在節點a的右邊插入一個數x
void insert(int a, int x)
{
e[idx] = x;
l[idx] = a, r[idx] = r[a];
l[r[a]] = idx, r[a] = idx ++ ;
}
// 刪除節點a
void remove(int a)
{
l[r[a]] = l[a];
r[l[a]] = r[a];
}