У меня проблема с удалением выбранного узла из моего списка. Задача состояла в том, чтобы удалить все узлы, которые включают данные, выбранные пользователем, и подсчитать их. Например, чтобы удалить все узлы, которые содержат 3, и считать их. Функция должна возвращать целое число с количеством удаленных узлов. Мой код для функции pop node и для pop всех узлов, включая конкретные данные, находится здесь. Я использую Visual Studio 2012 и отладки говорит, что некоторые указатели указываются в космос. Память не читалась. В чем проблема?Связанный список: Удаление узлов с выбранными данными
void pop(Node * head, Node * pointer) //delete node with given pointer
{
Node * p = head;
if (pointer == head)
{
head = p->next;
delete p;
}
else
{
while(p->next != pointer)
{
p = p->next;
}
p->next = pointer->next;
delete pointer;
}
}
int pop_all(Node * head, float data_out) //delete all nodes with proper data
{
Node * p = head;
int counter = 0;
while(p->next != NULL)
{
if (p->data == data_out)
{
pop(head,p);
counter++;
}
else
{
p = p->next;
}
}
return counter;
}
Удостоверьтесь, что это должно быть указано как C. –
Ваш код не будет правильно проверять список из 1 элемента (p-> next == NULL) в первый раз. –
Обратите внимание, что после посылки элемента один раз через 'pop_all()' вы хотите иметь 'p-> next', потому что тот же самый узел, на котором вы находитесь, теперь удален. –