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
函数中的代码? 最佳答案
这是我的实现,不是较短,但是您可以检查差异。也更干净。 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;
}
}