Элементы не удаляются из стека - PullRequest
2 голосов
/ 30 марта 2020

Метод deleteEven () не работает, программа переходит к бесконечному выводу, помогите исправить это

Стек:

typedef struct Node{
    int value;
    struct Node *next;
} NODE, *pNODE;

typedef struct Stack{
    pNODE top;
    int len;
} STACK, *pSTACK;

Метод:

void deleteEven(pSTACK pS){
    pNODE pN = pS->top;

    while(pN){
        if(pN->value % 2 == 0){
            pNODE del = pN;
            pN = pN->next;
            free(del);  
        }   
        else
            pN = pN->next;
    }
}

1 Ответ

1 голос
/ 30 марта 2020

Внутри функции вершина указателя не изменяется, когда указанный узел содержит четное значение. И элемент данных, следующий за предыдущим узлом перед удаленным узлом, также не изменяется.

Функция может быть определена следующим образом.

void deleteEven( pSTACK pS )
{
    pNODE *pN = &pS->top;

    while( *pN != NULL )
    {
        if( ( *pN )->value % 2 == 0 )
        {
            pNODE del = *pN;
            *pN = ( *pN )->next;
            free( del );  
        }   
        else
        {
            pN = & ( *pN )->next;
        }
    }
}

Не забудьте изначально установить данные при объявлении стека вершина NULL.

...