为什么pop没有让链栈出栈,我有ls->top=(ls->top)->next; 呀???

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
typedef int T; //数据元素类型
struct LNode {
    T data;
    LNode* next;
};

struct LinkStack {
    LNode* top; // 栈顶指针
    int len; // 栈的长度
};
LinkStack* LS_Create()
{
    LinkStack* ls=(LinkStack*)malloc(sizeof(LinkStack));
    ls->top = NULL;
    ls->len = 0;
    return ls;
}

/*释放栈*/
void LS_Free(LinkStack* ls)
{
    LNode* curr = ls->top;
    while(curr) {
        LNode* next = curr->next;
        free(curr);
        curr=next;
    }
    free(ls);
}

/*将栈变为空栈*/
void LS_MakeEmpty(LinkStack* ls)
{
    LNode* curr = ls->top;
    while(curr) {
        LNode* next = curr->next;
        free(curr);
        curr=next;
    }
    ls->top = NULL;
    ls->len = 0;
}

/*判断栈是否为空*/
bool LS_IsEmpty(LinkStack* ls)
{
    // 请在这里补充代码,完成本关任务
    /********** Begin *********/
    return ls->len;

    /********** End **********/
}

/*获取栈的长度*/
int LS_Length(LinkStack* ls)
{
    // 请在这里补充代码,完成本关任务
    /********** Begin *********/
    return ls->len-1;

    /********** End **********/
}

/*将x进栈*/
void LS_Push(LinkStack* ls, T x)
{
    // 请在这里补充代码,完成本关任务
    /********** Begin *********/
    LNode *s=(LNode*)malloc(sizeof(LNode));
    s->data=x;
    s->next=ls->top;
    ls->top=s;
    ls->len++;

    /********** End **********/
}

/*出栈。出栈元素放入item;如果空栈,将返回false*/
bool LS_Pop(LinkStack* ls, T& item)
{
    // 请在这里补充代码,完成本关任务
    /********** Begin *********/
    if(LS_IsEmpty(ls))
    return false;
    item=ls->top->data;    
    ls->top=(ls->top)->next;        //就是这里,我明明让top指向下一个LNode呀
    ls->len--;
    return true;
    /********** End **********/
}

/*读栈顶元素放入item。如果空栈,将返回false*/
bool LS_Top(LinkStack* ls, T& item)
{
    // 请在这里补充代码,完成本关任务
    /********** Begin *********/
if(LS_IsEmpty(ls))
    return false;
    item=ls->top->data;
    return true;
    /********** End **********/
}

/*从栈顶到栈底打印各结点数据*/
void LS_Print(LinkStack* ls)
{
    if (ls->len==0){ 
        printf("The stack: Empty!");
        return;
    }
    printf("The stack (from top to bottom):");
    LNode* curr=ls->top;
    while(curr) {
        printf(" %d", curr->data);
         
        curr=curr->next;
    }
   // printf("\n");
}

int main()
{
    LinkStack* ls=LS_Create();
    char dowhat[100];
    while(true) {
        scanf("%s", dowhat);
        if (!strcmp(dowhat,"push")) {
            T x;
            scanf("%d", &x);
            LS_Push(ls,x);
        }else if (!strcmp(dowhat,"pop")) {
            T item;
            LS_Pop(ls, item);
		}
        else {
            break;
        }
    }
    int length=LS_Length(ls);
    printf("Stack length: %d\n", length);
	
    LS_Print(ls);getch();
    LS_Free(ls);
}

你的isEmpty实现不对, 可以return ls->len == 0;