......... // p结点后面插入s结点 boolInsertNextNode(DNode *p, DNode *s) { if (p == NULL || s == NULL) returnfalse; s -> next = p -> next; if (p -> next != NULL) p -> next -> prior = s; // 下面的两行代码的顺序不可以变,之前也有过类似的地方,此处不做详细介绍 s -> prior = p; p -> next = s; returntrue; }
双链表的删除
1 2 3 4 5 6 7 8 9 10
// 刪除p的后继结点 boolDeleteNextNode(DNode *p) { if (p == NULL) returnfalse; DNode *q = p -> next; // 寻找p的后继结点 if (q == NULL) returnfalse; // p无后继结点 p -> next = q -> next; if (q -> next != NULL) q -> next -> prior = p; // q结点不是最后一个结点 free(q); // 释放结点空间 returntrue; }
双链表的销毁
1 2 3 4 5
voidDestroyList(DLinkList &L) { while (L -> next != NULL) DeleteNextNode(L); free(L); L = NULL; }