首页 > 其他 > 详细

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

时间:2020-04-17 23:31:00      阅读:68      评论:0      收藏:0      [点我收藏+]
//初始化双链表
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; 

 

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

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!