は次のとおりです。ポップ機能
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関数は、スタックに複数の値がある場合に機能しますが、スタック内に単一の値がある場合にはセグメンテーションフォルトが発生します。 私のデバッガによると、問題は
prev->next=NULL;
でpopFromTop方法である誰かが私は問題が何であるかを理解する助けていただけますか?ポップで唯一のノードがある場合、
'prev'がNULLの場合、' prev-> next'を 'NULL'に設定しようとしません。また、唯一のノードを削除した場合は、 '* hd'を' NULL'に設定する必要があります。 –
'popFromTop'を呼び出す前に空のチェックが必要です。実際の問題とは関係のない – BLUEPIXY
が、それはポップとプッシュの両方のための完全なリストのトラバースを必要とするなぜあなたは、スタックの最上位としてリストの尾を使用していますか?それは非効率的です。リストの* head *をスタックの一番上にして、pushとpopの両方がトラバーサルなしですぐにアクセスできるようにします。 – kaylum