Я застрял в этой функции, чтобы удалить узел из списка, если в списке есть два имени, они оба ушли. Если Энн и Джон включены в список, и я хочу удалить Энн, тогда мой список пуст, Джон ушел.
Что мне не хватает, чтобы сохранить соединение в списке, если я удалю узел 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;
}
Вы не соблюдаете prev
на каждой итерации цикла. Вы хотите что-то вроде:
prev = temp;
в нижней части цикла for
.
Попробуйте использовать эту функцию
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;
}
prev
связь «с, неprev
.