从链表中删除数据

delete data from linked list

本文关键字:数据 删除 链表      更新时间:2023-10-16

我正试图从链接列表中删除。但是,如果我试图删除第一个元素,它似乎不起作用。

if (found)
{
    if (prev == NULL)
    {
        prev = head;
        prev -> next = curr -> next;
        delete curr;
    }
    else
    {
        prev -> next = curr -> next;
        delete curr;
    }
}
return found;

如果我要从中间或尾部的某个位置删除,findNode函数就会起作用。但我发现,如果我从尾部删除,我必须将next设置为NULL,对吗?

问题是可能您实际上没有将head更改为指向列表的新头。您必须更改head:

if (prev == NULL)
{
    head = head->next;  // Set `head` to point to the next node, i.e. the new `head`
    delete curr;
}

假设findNode是正确的,并将prev设置为curr之前的节点(可能需要考虑双链表),则

   if (prev == NULL)
   {
      prev = head;
      prev -> next = curr -> next;
      delete curr;
   }

不正确。因为当prev为NULL时,它是找到的头节点。

所以代码应该是

   if (prev == NULL)
   {
      head = head->next;
      delete curr;
   }