【问题标题】:Elements are not removed from the stack元素不会从堆栈中移除
【发布时间】:2020-07-10 06:39:46
【问题描述】:

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

【问题讨论】:

标签: c linked-list stack singly-linked-list


【解决方案1】:

在函数内,当指向的节点包含偶数值时,指针 top 不会改变。并且被删除节点之前的前一个节点的数据成员next也没有改变。

函数可以通过以下方式定义。

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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    • 2020-08-03
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    相关资源
    最近更新 更多