无法从链接列表中弹出顶部元素

Aas*_*mar 0 c linked-list

我试图创建一个简单的链接列表程序,当我试图从列表中弹出第一个元素时,它没有弹出,它仍然是列表中的第一个元素,请帮我解决这个错误.

这是代码:

#include <stdio.h>
#include <stdlib.h>

void create(stack *s){
 if(s == NULL){
    s = (stack*)malloc(sizeof(stack)*1);
    (s->next)=NULL;
 }
 else{
    stack *temp = (stack*)malloc(sizeof(stack)*1);
    (temp->next)=s;
    s=temp;
 }
}

void push(stack *s, char x){
   create(s);
   (s->value)=x;
}

void isEmpty(stack *s){
    if(s == NULL){
        printf("List is Empty!\n");
    }
    else{
        printf("List is not Empty!\n");
    }
}

char pop(stack *s){
 if(s == NULL){
    isEmpty(s);
    return -1;
 }
 char x=s->value;
 s=(s->next);
 return x;
}   

int main(int argc , char* argv[]){
stack *s;
create(s);
char choice,data;
printf("Stack Created\n\n");
do{
    printf("Choose Option: pUsh, pOp, pEek, iseMpty, getSize, eXit: \n");

    scanf(" %c",&choice);

    switch(choice){
        case 'U':{
            printf("Enter the element to be pushed: \n");

            scanf(" %c",&data);
            push(s, data);
            break;
        }
        case 'O':{
            data=pop(s);
            if(data != NULL){
                printf("Popped: %c\n", data);
            }
            break;
        }
    }
}while(1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*son 5

这条线s=s->next;没有效果,因为s它是局部可变的.您需要返回新值s或使用指针来修改调用者的版本.