2-6 双向链表(2)插入算法

【算法】双向链表的插入

图示:

算法步骤:

  1. 将新结点s的前驱指针指向a s→prior = p→prior;
  2. 将s变成a的后继结点 p→prior→next = s;
  3. 将b变为s的后继结点 s→next = p;
  4. 将s变为b的前驱结点 p→prior = s;

代码:

Status ListInsert_DuL(DuLink &L, int i, ElemType e) {
	//在带头结点的双向循环链表L中第i哥位置插入元素e
	DuLNode *p, *s;
	if(!(p = GetElemP_DuL(L,i)))
		return ERROR; //将表L中i位置结点传给p,若不存在表示插入不可行,返回ERROR
	s->prior = p->prior;
	p->prior->next = s;
	s->next = p;
	p->prior = s;
	return OK;
}

2-6 双向链表(3)删除算法

【算法】双向链表的删除

图示:

算法步骤:

  1. 将a结点后继指针改为c p→prior→next = p→next;
  2. 将c结点前驱指针改为a p→next→prior = p→prior;
  3. 释放b结点 free(p);