双链表 | | 初始化插入删除遍历
Posted ikigai18
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了双链表 | | 初始化插入删除遍历相关的知识,希望对你有一定的参考价值。
//初始化双链表 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;
以上是关于双链表 | | 初始化插入删除遍历的主要内容,如果未能解决你的问题,请参考以下文章