基本思想
和单链表不同的是,双链表的每个节点都有2
个指针,一个指向前(l[N]
),另一个指向后(r[N]
)。
在这里不再定义head
(头节点)和tail
(尾节点),指定0
为头,1
为尾
idx
从2
开始(0
、1
)被占用
初始化双链表
初始化双链表图示
void Init()
{
r[0] = 1,l[1] = 0;//0表示左端点,1表示右端点
idx = 2;//0、1被占用
}
在下标是k
的点的右端插入一个点x
插入右端图示
要注意第3
步和第4
步不要搞反噢
void insert_right(int l,int x)
{
e[idx] = x;
r[idx] = r[k];
l[idx] = k;
l[r[k]] = idx;//要先写这个噢
r[k] = idx;
idx++;
}
在k
的左边插入一个点
同理,只要在l[k]的右边插入一个点(在k
左边点的右边插入x
)
l[k]
指向k
的左边的点
删除第k
个点
删除图示
void remove(int k)
{
l[r[k] = l[k];
r[l[k] = r[k];
}
厉害捏
写的太好了,简直我女神,一看就会!
别闹…