麻烦大家看看这个双向链表如何错了
麻烦大家看看这个双向链表怎么错了
#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;
#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;