从链表中删除数据

时间:2013-02-14 17:38:35

标签: c++

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

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

return found;

如果我要从中间或尾部的某处删除,findNode函数可以正常工作。但我发现如果我从尾部删除,我必须将下一个设置为NULL,我是对的吗?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

假设findNode正确并将prev设置为curr之前的节点(可能要考虑双向链接列表),那么

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

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

所以代码应该是

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