// Суть задачи заключается в том, что нужно создать метод, который будет удалять каждый элемент списка равного ключу
void List::DeleteIdenticalElements(char value) {
Node* newnode = m_head;
int i = 0;
for (int i = 0; i < m_size; ++i) { // Цикл, который отвечает за прохождение по каждому узлу
if (value == newnode->m_data) { // Если значение key равно значению m_data, тогда выполняется тело
if (i == 0) { // Если i = 0, т.е. newnode = m_head, тогда...
Node* temp = m_head; // Указателю temp присваивается голова
m_head = newnode->m_next; // Голова смотрит на следующий после удаляемого узла узел
delete temp; // Удаление нужного узла
--m_size; // Уменьшение размера списка
newnode = newnode->m_next; // Теперь newnode равен следующему узлу
continue;
}
}
if (value == newnode->m_data) { // Если значение key равно значению m_data, тогда выполняется тело
Node* temp = m_head;
Node* temp2 = nullptr;
for (int j = 0; j < i - 1; ++j) {
temp = temp->m_next; // temp увеличивается до предстоящего к удаляемому узлу(-1) узла, чтобы запомнить узел, который будет смотреть на следующий после удаляемого узла узел
}
temp2 = temp->m_next; // temp2 - указатель, который смотрит на удаляемый узел
temp->m_next = temp2->m_next; // Вместо удалямого узла temp смотрит на следующий
delete temp2; // Удаление нужного узла
--m_size; // Уменьшение размера списка
}
newnode = newnode->m_next;
}
}
Выдает ошибку на этапе выполнения. Отладчик говорит, что ошибка в
if (value == newnode->m_data)
. Но если поставить
return
до изменения счетчика цикла, то ошибки нет