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;}