0
我使用双向链表创建了一个堆栈结构,并且在弹出列表的最后一个元素时遇到了段错误。这里是弹出方法和一些相关的全局变量:弹出堆栈的唯一成员
typedef struct node {
int value;
struct node *prev;
struct node *next;
} node;
node *head = NULL;
node *tail = NULL;
int stackSize = 0;
int removeFromStack(){
node *tempNode = head;
if(stackSize <= 0){
emptyStackError();
}
int val = head->value;
if(stackSize == 1){
head = NULL; //Segfaults here
tail = NULL;
}
else{
head = head->next;
head->prev = NULL;
}
free(tempNode);
stackSize--;
return val;
}
很显然,我不应该只是将头部和尾部设置为空。我应该做些什么呢?
堆栈大小为1的头部和尾部应该等于堆叠上的单个物体 – brendosthoughts 2013-04-22 20:53:14
@brendanmorrison:它是流行音乐之前的一个*,所以这看起来很好。 – Roddy 2013-04-22 20:54:53
@brendanmorrison:将'head'和'tail'设置为'NULL'的子句在'if'中,它在检查'stackSize'之前会减少以指示最后一个对象已被删除。该代码将列表清空,而不是将其设置为具有一个对象。 – 2013-04-22 20:55:04