双链表的操作
作者:互联网
//初始化双链表
bool InitDlinkList(DLinklist &L) {
L = (DNode*)malloc(sizeof(DNode));//分配一个头结点
if (L == NULL)
return false;
L->prior = NULL;//头结点的priot永远指向NULL
L->next = NULL;//头结点之后暂时还没有头结点
return true;
}
//判断双链表是否为空(带头节点)
bool Empty(DLinklist L) {
if (L->next = NULL)
return true;
else
return false;
}
//在p节点之后插入s节点
bool InsertNextNode(DNode *p, DNode *s) {
if (p == NULL || s == NULL) {//非法参数
return false;
}
s->next = p->next;//将s节点插入到*p节点之后
if (p->next != NULL)
p->next->prior = s->next;//如果p节点后有后继节点
s->prior = p;
p->next = s;
}
//删除p节点的后继节点
bool DeleteNextNode(DNode *p) {
if (p == NULL)
return false;
DNode *q = p->next;//找到p的后继节点
if (q == NULL)//若p没有后继节点
return false;
p->next = q->next;
if (q->next != NULL)//q节点不是最后一个节点
q->next->prior = p;
free(q);//释放节点空间
return true;
}
//后序遍历
void Outputnext(DLinklist L) {
DNode *p = L;
while (p != NULL) {
p->next;
cout << p->data << endl;
}
}
//前序遍历
void OutputPrior(DLinklist L) {
DNode *p = L;
while (p->prior != NULL) {
p->prior;
cout << p->data << endl;
}
}
//链表的摧毁
void DestoryList(DLinklist &L) {
//循环释放各个数据节点
while (L->next != NULL)
DeleteNextNode(L);
free(L);//释放头结点
L = NULL;//头指针指向NULL
}
标签:return,next,prior,双链,操作,NULL,节点,DNode 来源: https://blog.csdn.net/FunkyTao/article/details/116033586