我一直坚持使用此功能从列表中删除节点,如果列表中有两个名称它们都已消失。如果Anne和John在列表中并且我想删除Anne,那么我的列表是空的,John已经离开了。
如果我删除节点init,我在连接列表中缺少什么?
bool ContactList::remove(string key)
{
NodePtr prev = NULL;
for(NodePtr temp = head; temp != NULL; temp = temp->link)
{
if(temp->data.key == key)
{
if(prev == NULL)
{
head = temp->link;
delete temp;
return true;
}
else
{
prev = temp->link;
delete temp;
return true;
}
}
}
return false;
}
答案 0 :(得分:2)
在循环的每次迭代中,您都没有使prev
保持最新状态。你想要这样的东西:
prev = temp;
位于for
循环的底部。
答案 1 :(得分:1)
尝试使用此功能
bool ContactList::remove(string key)
{
NodePtr prev = NULL;
for(NodePtr temp = head; temp != NULL; temp = temp->link)
{
if(temp->data.key == key)
{
if(prev == NULL)
{
head = temp->link;
delete temp;
return true;
}
else
{
prev->link = temp->link; // change.
delete temp;
return true;
}
}
prev = temp; // change.
}
return false;
}