码迷,mamicode.com
首页 > 其他好文 > 详细

双链表 | | 初始化插入删除遍历

时间:2020-04-17 22:08:30      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:头结点   data   void   ret   let   等价   return   lin   als   

//初始化双链表
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; 

 

双链表 | | 初始化插入删除遍历

标签:头结点   data   void   ret   let   等价   return   lin   als   

原文地址:https://www.cnblogs.com/ikigai18/p/12722522.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!