编辑代码

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

typedef struct{
    int data;
    DNode *prior,*next;
}DNode,*DLinkedList;

//Init DLinkedList
bool InitDLinkedList(DLinkedList *L)
{
    *L=(DNode*)malloc(sizeof(DNode));
    if(L==NULL)
    return false;
    (*L)->prior=NULL;
    (*L)->next=NULL;//没数据,暂时分配为NULL
    return true;
}
//Inser Node s After Node p
bool InsertDLinkedList(DNode *p,DNode *s)
{
    if(p==NULL||s==NULL)	return false;	//非法参数
    //先使得s的next指向插入结点位置的后一个节点
    s->next=p->next;
    if(p->next!=NULL) //很重要
    {   //使得p的后继节点的前驱指针指向s
        p->next->prior=s;
    }
    //s的前驱指针指向p
    s->prior=p;
    //p的后驱指针指向s
    p->next=s;
}
//Delete Node p
bool DeleteDLinkedList(DNode *p)
{
    if(p==NULL) 
        return false;
    if(p->next!=NULL) {   
        DNode *s= p->next;
        s->prior=p->prior;
        p->prior->next=s;
    }
    else {
        p->prior->next=NULL;
    }
    free(p);
    return true;
}