输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。 如输入{1,2,3}的链表如下图: 返回一个数组为[3,2,1]

问题遇到的现象和发生背景

自测输入
{1,2,3}
预期输出
[3,2,1]
实际输出
[3,0,-492915352]
我这代码哪里出了问题导致实际输出的这样的

 struct stack
 {
     int *num;
     int top;
     int maxsize;
 };
 struct stack *create(M) 
 
 {
     struct stack *p;
     p=(struct stack*)malloc(sizeof(struct stack));
     p->top=-1;
     p->num=(int*)malloc(sizeof(int)*M);
     p->maxsize=M;
     return p;
     
     
 };
 void push(struct stack *q,int x)
{
    q->num[++q->top]=x;

}

int pop(struct stack *q)
{
    int tem;
    tem=q->num[q->top--];
    return tem;
}

int* printListFromTailToHead(struct ListNode* listNode, int* returnSize ) {
    struct ListNode* p;
    p=listNode;
    
    struct stack *q;
   
    int num=0;
    while(p->next!=NULL)
    {
        num++;
        p=p->next;
    }
    
     q=create(num);
    int varry[num];
    int i=num;
    
    p=listNode;
       while(p->next!=NULL)
    {
        push(q,p->next->val);
        p=p->next;
    }
    
   
   for(int o=0;o<num;o++)
    {
        varry[o]=pop(q);
    }
    
    *returnSize=i+1;
    return  varry;
}


第52行,push(q,p->next->val); 应改为:push(q,p->val);