我编写了一段代码,通过将节点的数据与给定的数据进行比较来删除节点。如果相等,则删除该节点。我的问题是我的代码将删除列表中除最后一个节点之外的每个节点,我无法弄清楚我做错了什么,所以我像往常一样寻求帮助
代码已附上。希望有人帮助我。
(编辑:已根据错误修改代码)
int dl_delete_element(Dlist **head, Dlist **tail, int data)
{
Dlist *temp,*prev;
if(*head==NULL)
return FAILURE;
temp=*head;
if(temp->data==data)
{
prev=*head;
(temp->next)->prev=NULL;
*head=temp->next;
free(prev);
return SUCCESS;
}
else
{
while(temp!=NULL)
{
if(temp->data==data)
{
prev=temp;
(temp->prev)->next=temp->next;
(temp->next)->prev=temp->prev;
free(prev);
return SUCCESS;
}
else
temp=temp->next;
}
return DATA_NOT_FOUND;
}
}
让我们尝试一些简单的事情。
找到要删除的元素。
Dlist* cur = *head;
while (cur != NULL && cur->data != data)
cur = cur->next;
if (cur == NULL)
return FAILURE;
删除它。
if (cur == *head)
*head = cur->next;
else
cur->prev->next = cur->next;
if (cur == *tail)
*tail = cur->prev;
else
cur->next->prev = cur->prev;
free(cur);
return SUCCESS;
看起来不错吗?