Эта функция предназначена для удаления элементов из связанного списка. В настоящее время это делает работу, однако, с дальнейшим тестированием я узнал, что я получаю ошибку сегментации после использования функции примерно в 2-3 раза. Например, скажем, listA
содержит 1 2 3 4 4 5
, когда я сделаю remove listA 4
, а затем распечатаю элементы listA
, выход должен быть 1 2 3 5
, и это так. Однако, когда я использую функцию удаления еще 1-2 раза в списке, он просто перестает работать, и я продолжаю получать ошибки сегментации. Я не знаю, почему .. Любая помощь будет оценена!функция не работает несколько раз?
void mylist::remove(int z)
{
Node *currP, *prevP;
prevP = NULL;
for (currP = head;
currP != NULL;
prevP = currP, currP = currP->next) {
if (currP->key == z) {
if (prevP == NULL) {
head = currP->next;
} else{
prevP->next = currP->next;
}
delete currP;
currP=prevP;
numberofnodes--;
}
}
return;
}
Вы были близки к точному, но: * «когда я использую функцию удаления еще 1-2 раза в списке, он просто перестает работать» * опустил мяч. Посмотрите на [«Минимальный, полный, проверяемый пример»] (http://stackoverflow.com/help/mcve). Покажите свой точный ввод и программу, которая компилирует, которую любой может скопировать-вставить в компилятор («полный») и может повторно («verifably») давать неверный вывод. Проверьте основные случаи, такие как удаление «1» из списка, содержащего только 1. Вы можете найти свою собственную проблему в процессе ... – HostileFork
Просто измените инструкцию update в цикле for, получите доступ к следующему элементу из currP, только если он не равен NULL. –