双链表插入麻烦

时间:2013-09-12 12:36:33

标签: c data-structures linked-list

任何人都可以给我链接或好的教程或任何书的插入和删除双链表的链接。我需要创建两个函数:一个用于在位置后插入元素并删除位置后的元素。我发现很多在线程序,但很难理解它背后的算法或逻辑。任何人都能解释一下在某个节点之后插入或删除的情况吗?到目前为止我所理解的是节点被全局声明为:

 struct node{
             struct node *prev;
             struct node *next;
             int info;
            }*start;

*start的含义是什么?

1 个答案:

答案 0 :(得分:2)

假设您迭代到第N个元素(通过索引或搜索条件找到)。

<强> INSERTION

你想在* Nth和Nplus1th = Nth-&gt; next之间插入节点fooitem

1)备份Nth-> next的引用

node *Nplus1th = Nth->next; //save it for now

2)覆盖Nth-&gt; next

Nth->next = &fooitem; //The next of Nth references fooitem

3)将fooitem的下一个设置为this-&gt; next

的备份引用
fooitem.next = Nplus1th;

4)在fooitem参考

旁边设置备份的前一个
Nplus1th->prev = &fooitem;

5)将fooitem prev设置为Nth

fooitem.prev = Nth;

<强> DELETION

你想在* Nth和Nplus1th = Nth-&gt; 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。在尝试访问此节点的下一个或上一个引用时,必须包含一个检查以验证此假设。

相关问题