我使用双向链表在 C 中构建了一个堆栈结构,并且在弹出列表的最后一个元素时遇到了段错误。这是 pop 方法和一些相关的全局变量:
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;
}
很明显,我不应该只是将头部和尾部设置为空。我应该怎么做?