Удалить каждый второй элемент списка

102
11 сентября 2021, 03:50

Вечер добрый. Нужно написать функцию удаления каждого второго элемента списка. Кучу всего перепробовал, но постоянно удаляет не то, что нужно, или вовсе выбивает ошибку. Ниже привел кусок кода. Может увидите ошибку... Буду крайне благодарен.

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;
}
}
Answer 1

Смотрите что вы делаете:

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;
    }
}

Нужно всегда проверять используемый указатель

READ ALSO
Ошибки при использовании функций из dll

Ошибки при использовании функций из dll

У меня есть своя dll библиотека, гдеh файл:

85
Как организовать структуру данных

Как организовать структуру данных

Пытаюсь в силу своих знаний написать движок дли игры в русские шашки на C++ (если точнее, уже по большей части написал)Требуется определить,...

94
Как сделать,чтобы после выполнения функции значение переменной сохранялось для дальнейшей работы

Как сделать,чтобы после выполнения функции значение переменной сохранялось для дальнейшей работы

У меня есть две функции, 1 для записи в файл предложения ,2 для чтения его и сохранения предложения в переменную, но когда я хочу вывести предложение...

124