假设您迭代直到第 N 个元素(通过索引或搜索条件找到)。
插入
您想在 *Nth 和 Nplus1th = Nth->next 之间插入节点 fooitem
1)备份Nth->next的引用
node *Nplus1th = Nth->next; //save it for now
2)覆盖第N个->下一个
Nth->next = &fooitem; //The next of Nth references fooitem
3) 将 fooitem 的 next 设置为 this->next 的备份引用
fooitem.next = Nplus1th;
4) 将备份的上一个设置在 fooitem 引用旁边
Nplus1th->prev = &fooitem;
5) 将 fooitem prev 设置为 Nth
fooitem.prev = Nth;
删除
您想删除 *Nth 和 Nplus1th = Nth->next 之间的节点 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。在尝试访问此节点的下一个或上一个引用时,必须包含检查以验证此假设。