我正在尝试从链接列表中删除。但是,如果我尝试删除第一个元素,它似乎不起作用。
if (found)
{
if (prev == NULL)
{
prev = head;
prev -> next = curr -> next;
delete curr;
}
else
{
prev -> next = curr -> next;
delete curr;
}
}
return found;
如果我要从中间或尾部的某处删除,findNode函数可以正常工作。但我发现如果我从尾部删除,我必须将下一个设置为NULL,我是对的吗?
答案 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;
}