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演示效果如动画所示。动画