Вечер добрый. Нужно написать функцию удаления каждого второго элемента списка. Кучу всего перепробовал, но постоянно удаляет не то, что нужно, или вовсе выбивает ошибку. Ниже привел кусок кода. Может увидите ошибку... Буду крайне благодарен.
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;
}
}
Нужно всегда проверять используемый указатель
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости