双向链表结点的插入

发布时间:   来源:文档文库   
字号:
双向链表结点的插入
双向链表的插入操作基本上和单链表相同,但是双向链表的指针的调整要比单链表复杂。下面我们仍然采用例子说明的方式来讨论结点的插入问题。
1. 例子
现有一个双向链表如图3-18所示。
NULL

a b c d
NULL

head 3-18 双向链表示例 此时将结点插入链表有三种情况: 1 插入在双向链表首结点之前
新的结点插入在双向链表的首结点之前,需要将新结点的指针next指向首结点,同时原链表的首结点的prior指针需指向新结点。另外 head指针指向新结点,即新结点成为双向链表的开始。其过程如下图所示。


新结点 原首结点

NULL
NULL d a b

head

3-19 双向链表结点插入在首结点之前示例
2 插入在双向链表的尾端
新结点若插入在双向链表的尾端,需要将尾结点的指针next指向新结点。同时将新结点的指针prior指向链表的尾结点。其过程如下图所示。


NULL b ... d NULL
a

原尾结点 新结点
head 3-20 双向链表结点插入在尾端示例 3 插入在链表的中间
新的结点插入在链表的中间,如果我们找到p结点,将结点插入在其后,则需要将新结点的next指针指向p结点的next指针,但不能让链表断裂。再将新结点的prior指针指向p结点,然后将p结点的next 指针指向新结点,最后再将下一个结点的prior指针指向新结点。其过程如下图所示。



NULL b a c d
NULL

head p


新结点
3-21 双向链表结点插入在中间示例
2.算法思想
1 向系统申请一个新结点(new)供用户输入欲插入结点的内容。 2 用户输入一个结点内容(key,表示欲插入在那一个结点之后。
3 依次寻找下一个结点,直到结点内容等于key或结点指针为NULL(即找不到该结点)
如果该结点不存在,则插入在首结点前: new->next=head; head->prior=new;
head=new; 如果找到该结点,且在双向链表中间: new->next=p->next; new->prior=p;
p->next=new;
new->next->prior=new; 如果找到该结点,且在双向链表的尾端: new->next=p->next; new->prior=p;
p->next=new;


本文来源:https://www.2haoxitong.net/k/doc/d6a1c6a90242a8956bece4d8.html

《双向链表结点的插入.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式