删除双向链表中选定的元素

问题描述 投票:0回答:1

我编写了一段代码,通过将节点的数据与给定的数据进行比较来删除节点。如果相等,则删除该节点。我的问题是我的代码将删除列表中除最后一个节点之外的每个节点,我无法弄清楚我做错了什么,所以我像往常一样寻求帮助

代码已附上。希望有人帮助我。

(编辑:已根据错误修改代码)

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;
    }
}
c algorithm data-structures linked-list
1个回答
0
投票

让我们尝试一些简单的事情。

  1. 找到要删除的元素。

     Dlist* cur = *head;
     while (cur != NULL && cur->data != data) 
         cur = cur->next;
     if (cur == NULL) 
         return FAILURE;
    
  2. 删除它。

     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;
    

看起来不错吗?

© www.soinside.com 2019 - 2024. All rights reserved.