共计 611 个字符,预计需要花费 2 分钟才能阅读完成。
1、和单链表比拟
单链表无奈逆向检索
双链表可进可退
存储构造:
typedef struct DNode { // 定义双链表节点类型
ElemType data; // 数据域
struct DNode *prior, *next; // 前驱和后继指针
} DNode, *DLinkList;
2、插入节点
在 p 节点后插入 s 节点,留神执行的程序
/**
* 在 p 节点之后插入 s 节点
* @param p
* @param s
* @return
*/
bool InsertNextDNode(DNode *p, DNode *s) {if (p == NULL || s == NULL) { // 非法参数
return false;
}
s->next = p->next;
if (p->next != NULL) { // 如果 p 节点有后继节点
p->next->prior = s;
}
s->prior = p;
p->next = s;
return true;
}
3、删除节点
删除 p 节点后的 q 节点
/**
* 删除 p 的后继节点
* @param p
* @return
*/
bool DeleteNextNode(DNode *p) {if (p == NULL) {return false;}
DNode *q = p->next; // 找到 p 的后继节点 q
if (q == NULL) {return false;}
p->next = q->next;
if (q->next != NULL) { // q 节点不是最初一个节点
q->next->prior = p;
}
free(q); // 开释空间节点
return true;
}
正文完