双链表的删除功能中的代码减少

时间:2015-05-27 04:25:33

标签: c doubly-linked-list

void delete(struct node **top,int val)    
{       
    struct node *cur=(*top);    
    while(cur!=NULL&&(cur)->data!=val) 
    {   
        cur=cur->next;    
        if(cur==(*top))   
        { 
            if((*top)->next!=NULL)    
            {   
                (*top)=(*top)->next;   
                (*top)->prev=NULL;   
            }   
            else   
                (*top)=NULL;   
        }
        else   
        {    
            cur->prev->next=cur->next;    
            if(cur->next!=NULL)    
                cur->next->prev=cur->prev;    
        }
        free(cur);    
        printf("deleted %d \n",val);    
    }
}    

我的问题是:

有没有办法在双重链接列表delete函数中减少我的代码?

1 个答案:

答案 0 :(得分:0)

这是我的实施,不是更短,但你可以检查差异。也更干净。 p是头,g是尾节点。

void Container::Remove(int pr)
{
    Node *pDel = p; Node *pNex = p->next;
    while (pDel != NULL){
        if (pDel->item.GetValue() > pr){
            if (p == NULL || pDel == NULL) return;
            if (p == pDel) p = pDel->next;
            if (g == pDel) g = pDel->prev;
            if (pDel->next != NULL)
                pDel->next->prev = pDel->prev;
            if (pDel->prev != NULL)
                pDel->prev->next = pDel->next;
            delete pDel;
        }
        pDel = pNex;
        if(pDel != NULL) pNex = pDel->next;
    }
}