gpt4 book ai didi

双链表删除函数的代码减少

转载 作者:行者123 更新时间:2023-11-30 17:14:05 25 4
gpt4 key购买 nike

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;
}
}

关于双链表删除函数的代码减少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30473156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com