麻烦大家看看这个双向链表如何错了

麻烦大家看看这个双向链表怎么错了
#include <stdio.h>
#include <malloc.h>
#define ElemType int

typedef struct DNode
{
ElemType data;
DNode *next;
DNode *prior;
}DNode,*DLinkList;


bool initDList(DLinkList* dlst)
{
*dlst = (DLinkList)malloc(sizeof(DNode));
if(*dlst == NULL)
return false;
(*dlst)->next = NULL;
(*dlst)->prior = NULL;
return true;
}

void deleteDList(DLinkList* dlst)
{
DLinkList p = (*dlst)->next;
DLinkList q;
while(p)
{
q = p->next;
free(p);
p = q;
}
free(*dlst);
*dlst = NULL;


}

bool insertElem(DLinkList* dlst,int index,ElemType e)
{
int cnt = 0;
DLinkList p = *dlst;
while(p)
{
if(index == cnt)
{
DLinkList pnew = (DLinkList)malloc(sizeof(DNode));
pnew->data = e;
pnew->next = p->next;
pnew->prior = p;
p->next = pnew;
p->next->prior = pnew;

return true;
}
p = p->next;
++cnt;
}
return false;

}

void deleteElem(DLinkList* dlst,int index,ElemType *e)
{
int cnt = 0;
DLinkList p = (*dlst)->next;
while(p)
{
if(index == cnt)
{
*e = p->data;
p->prior->next = p->next;
p->next->prior = p->prior;

free(p);

break;
}
++cnt;
p = p->next;
}


}

void printList(DLinkList* dlst)
{
printf("elements are: ");
DLinkList p = (*dlst)->next;
while(p)
{
printf("%d\t",p->data);
p = p->next;
}
printf("\n");
}

链表的插入没有问题,但是删除某个元素后,再打印链表就会出错。麻烦大家了。

------解决方案--------------------
删除操作好像没错吧。
------解决方案--------------------
pnew->next = p->next;
pnew->prior = p;
p->next = pnew;
if(pnew->next!=NULL)
pnew->next->prior = pnew;