//初始化双链表
bool InitDLinkList(DLinklist &L){
L=(Dnode*)malloc(sizeof(Dnode));
if(L==NULL)
return false;
L->prior=NULL; // 头结点的prior永远指向NULL
L->next=NULL; // 头结点之后还没有结点
return true;
}
void testDLinkList(){
DLinklist L;
InitDLinkList(L);
}
typedef struct DNode{
int data;
struct DNode *prior,*next;
}DNode,*DLinklist; //DLinklist与DNode等价
//在p结点之后插入s结点
bool InsertNextDNode(DNode *p,DNode *s){
if(p==NULL||s==NULL)
return false;
s->next=p->next;
if(p->next!=NULL)
p->next->prior=s;
s->prior=p;
p->next=s;
}
//删除p结点的后继结点
bool DeleteNextDNode(DNode *p){
if(p==NULL)
return false;
DNode *p=p->next; //找到p的后继结点q
if(q==NULL)
return false;//即p没有后继
p->next=q->next;
if(q->next!=NULL)//q不是最后一个结点
q->next->prior=p;
free(q);
return true;
}
/**销毁一个双链表
每一个都删除头结点的后继结点**/
void DestoryList(DLinklist &L){
while(L->next!=NULL)
DeleteNextDNode(L);
free(L); //释放头结点
L=NULL; //头指针指向null
}
//后向遍历
while(p!=NULL)
p=p->next;
//前向遍历
while(p!=NULL)
p=p->prior;
//前向遍历(跳过头结点)
while(p->prior!=NULL)
p=p->prior;