救命,代码运行不出来,感觉好像是进栈,和进队列出的错

#include<stdio.h>
#include<stdlib.h>
typedef struct lnode
{
char ldata;
struct lnode *next;
}lnode;
typedef struct qnode
{
char qdata;
struct qnode *qnext;
}qnode;
typedef struct
{
qnode *front;
qnode *rear;
}quene;
void pushlnode(lnode *head,char x); //进栈
char poplnode(lnode *head); //出栈
void pushqnode(quene *s,char x); //进队列
char popqnode(quene *s); //出队列
void llnode(lnode *head);
void qqnode(quene *s);
lnode *head;
quene *s;
int main()
{
char x;
printf("请输入你想要判断是否为回文的字符串:");
llnode(head);
qqnode(s);
scanf("%c",&x);
while(x!='#')
{
pushlnode(head,x);
pushqnode(s,x);
scanf("%c",&x);
}
printf("dgdhk");
while(head->next!=NULL&&s->front!=NULL)
{
if(poplnode(head)!=popqnode(s))
{
printf("该字符串不是回文");
return 0;
}
}
printf("该字符串是回文");
return 0;
}
void llnode(lnode head)
{
head=(lnode
)malloc(sizeof(lnode));
head->next=NULL;
}
void qqnode(quene *s)
{
//s=(quene *)malloc(sizeof(quene));
s->rear=NULL;
s->front=NULL;
}
void pushlnode(lnode *head,char x)
{
lnode *p;
p=(lnode *)malloc(sizeof(lnode));
p->ldata=x;
p->next=head->next;
head->next=p;
}
char poplnode(lnode *head)
{
lnode *p;
char d;
p=head->next;
if(p==NULL)
{
printf("堆栈已空");
return 0;
}
head->next=p->next;
d=p->ldata;
free(p);
printf("%d ",d);
return d;
}
void pushqnode(quene *s,char x)
{
qnode *p;
p=(qnode *)malloc(sizeof(qnode));
p->qdata=x;
p->qnext=NULL;
if(s->rear!=NULL)
s->rear->qnext=p;
s->rear=p;
if(s->front==NULL)
s->front=p;
}
char popqnode(quene *s)
{
qnode *p;
char d;
if(s->front==NULL)
{
printf("队列已空");
return 0;
}
else
{
d=s->front->qdata;
p=s->front;
s->front=s->front->qnext;
if(s->front==NULL)
s->rear=NULL;
free(p);
printf("%d ",d);
return d;
}
}

请问你的输入是什么?