任何人都可以给我链接或任何插入和删除双链表的书籍的链接或好的教程或链接。我需要创建 2 个函数:一个用于在位置后插入元素和在位置后删除元素。我发现许多在线程序,但不太了解其背后的算法或逻辑。谁能解释一下某个节点后插入或删除发生了什么?到目前为止,我的理解是节点全局声明为:
struct node{
struct node *prev;
struct node *next;
int info;
}*start;
这*start
这里是什么意思?
假设你迭代到第N个元素(通过索引或搜索条件找到)。
插入
您想在 *N 和 Nplus 之间插入节点 fooitem 第 1 个 = 第 N 个>下一个
1) 备份第 N 个>下一个的引用
node *Nplus1th = Nth->next; //save it for now
2)覆盖第N>下一个
Nth->next = &fooitem; //The next of Nth references fooitem
3) 将 fooitem 的下一个设置为这个>下一个的备份引用
fooitem.next = Nplus1th;
4)在fooitem引用旁边设置备份的上一个
Nplus1th->prev = &fooitem;
5) 将 fooitem prev 设置为 N th
fooitem.prev = Nth;
删除
您要删除 *N 和 Nplus1 = 第 N 个之间的节点 fooitem>下一个
node *fooitem = Nth->next;
Nth->next= fooitem->next; //"forward bridge" to next->next
fooitem->next->prev = Nth; //"backward bridge" to prev->prev
//Delete references for safety
fooitem->prev=NULL;
fooitem->next=NULL;
return fooitem;
重要说明:上面的代码假定第 (N+1) 个节点不是 NULL。在尝试访问此节点的下一个或上一个引用时,必须包含检查以验证此假设。