Вечер добрый. Нужно написать функцию удаления каждого второго элемента списка. Кучу всего перепробовал, но постоянно удаляет не то, что нужно, или вовсе выбивает ошибку. Ниже привел кусок кода. Может увидите ошибку... Буду крайне благодарен.
struct list {
int data;
list *pNext;
};
void deleteItems(list *pStart, int k) {
list *tmp;
list *curr = pStart; // Текущий элемент списка
while( curr ) // Проходим по списку
{
if( curr->data % 2 == 0 ) // Если элемент четный
{
list *tmp = curr->pNext; // удаляемый элемент
curr->pNext = tmp->pNext;
delete tmp;
}
curr = curr->pNext;
}
}
Смотрите что вы делаете:
list *tmp = curr->pNext;
конструктора структура не имеет, поэтому tmp->pNext
ни на что не указывает, и еще вы проверили, что curr
не нулевой, но вы не знаете curr->pNext
нулевой или нет. И в следующей строчке :
curr->pNext = tmp->pNext;
вы этот неизвестно какой указателью присваиваете указатель, который ни на что не указывает.
Если вы хотите удалять каждый второй элемент, а не те, у которых data
четное число, то так:
void deleteItems(list* pStart, int k) {
list* curr = pStart;
while (curr->pNext)
{
list* tmp = curr->pNext; // удаляемый элемент
if(tmp->pNext)
curr->pNext = tmp->pNext;
delete tmp;
curr = curr->pNext;
}
}
Нужно всегда проверять используемый указатель
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Пытаюсь в силу своих знаний написать движок дли игры в русские шашки на C++ (если точнее, уже по большей части написал)Требуется определить,...
У меня есть две функции, 1 для записи в файл предложения ,2 для чтения его и сохранения предложения в переменную, но когда я хочу вывести предложение...