|
2.3.5 双向链表
在双向链表上进行操作基本上和单向链表相同,例如,查找结点也是要从头指针指示的头结点开始,但插入和删除时必须同时修改两个方向上的指针,它们的算法分别如下所示。
|
|
|
|
|
算法2.22
void ListInsert_DuL(DuLink &L, DuLNode* p, DuLNode*
s )
{
//
在带头结点的双向循环链表 L 中结点 *p 之后插入结点 *s
s->next = p->next; p->next = s;
s->next->prior = s; s->prior = p;
}// ListInsert_DuL
|
|
算法2.22演示效果如动画所示。 |
|
|
算法2.23
void ListDelete_DuL(DuLink &L, DuNode* p, ElemType &e)
{
//
删除带头结点的双向循环链表L中结点 *p 的后继,
// 并以 e 返回它的数据元素
q = p->next; e = q->data;
p->next = q->next;
p->next->prior = p;
delete q;
} // ListDelete_DuL |
|
算法2.23演示效果如动画所示。 |
|