元素不会从堆栈中移除
Elements are not removed from the stack
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;
}
}
在函数内,当指向的节点包含偶数值时,指针顶部不会改变。而被删除节点之前的前一个节点的数据成员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;
}
}
}
不要忘记在声明堆栈时最初将数据成员 top 设置为 NULL。
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;
}
}
在函数内,当指向的节点包含偶数值时,指针顶部不会改变。而被删除节点之前的前一个节点的数据成员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;
}
}
}
不要忘记在声明堆栈时最初将数据成员 top 设置为 NULL。