Я создаю стек, используя связанный список в C. Код выглядит следующим образом:Pop Функция В Linked Результаты Список Stack в Сегментация C
struct node{
int xposition;
int yposition;
struct node* next;
};
void pushToTop(struct node** hd, int x, int y){
struct node* curr= *hd;
struct node* prev=NULL;
while(curr!=NULL){
prev=curr;
curr= curr->next;
}
struct node* ptr= (struct node*)malloc(sizeof(struct node));
ptr->xposition=x;
ptr->yposition=y;
ptr->next=curr;
if(prev==NULL){
*hd= ptr;}
else{
prev->next=ptr;
}
}
void popFromTop(struct node** hd){
struct node* curr= *hd;
struct node* prev=NULL;
while (curr->next !=NULL) {
prev=curr;
curr=curr->next;
}
free(curr);
prev->next= NULL;
}
Функция Нажмите работает 100% времени , Функция pop работает, если в стеке есть несколько значений, но приводит к ошибке сегментации, когда в стеке есть одно значение. По моему отладчику, проблема в методе popFromTop с
prev->next=NULL;
Может кто-то пожалуйста, помогите мне понять, в чем проблема?
Если 'prev' является NULL, вы не хотите пытаться установить' prev-> next' в 'NULL'. Кроме того, если вы удаляете единственный узел, вам нужно установить '* hd' значение' NULL'. –
И нужно выполнить пустой чек перед вызовом 'popFromTop'. – BLUEPIXY
Не связанный с реальным вопросом, но почему вы используете хвост списка как вершину стека, так как для этого требуется обход полного списка как для поп, так и для нажатия? Это неэффективно. Используйте * head * списка как верхнюю часть стека, чтобы сразу нажать и поп получить доступ к нему без какого-либо обхода. – kaylum