双向链表,有两个指针域,一个指向前节点一个指向后节点。
1 typedef int elemtype; 2 3 typedef struct dnode{ 4 elemtype date; 5 struct dnode *next,*prior; 6 }DLinkedList;
初始化与单链表相同。前插运算:先将带插入节点的前后指针连上链表,再使链表上的指针指向节点(顺序不能反)。
1 void DInsertBefore(DLinkedList *p,DLinkedList *s){ 2 3 s->next = p; 4 s->prior = p->prior; 5 p->prior->next = s; 6 p->prior = s; 7 8 }
删除节点本身,每个节点都有前后指向
1 void DDeleteNode(DLinkedList *p){ 2 3 p->prior->next = p->next; 4 p->next->prior = p->prior; 5 free(p); 6 7 }