这是一个简单的头指针法,请教一下,为什么小弟我的输出会多个问号的,不知道错哪了,大家帮小弟我指出好吗

这是一个简单的头指针法,请问一下,为什么我的输出会多个问号的,不知道哪里错了,大家帮我指出好吗?
#include<stdio.h>
#include<stdlib.h>
#define N 5
typedef struct node
{
int data;
struct node *next;
}NODE;

NODE *creatlist()
{
NODE *h;
NODE *s;
char c;
int flag=1; /* 设置一个标志,初值为1,当输入“$”时,flag为0,建表结束*/
h=(NODE *)malloc(sizeof(NODE));
h->next=NULL;
while(flag)
{
c=getchar();
if(c!='\n')
{
s=(NODE *)malloc(sizeof(NODE)); /*为读入的字符分配存储空间*/
s->data=c;
s->next=h->next;
h->next=s;
}
else
flag=0;
}
return h;
}
void output(NODE *h)
{
NODE *p;
p=h;
if(p==NULL)
printf("The list is NULL");
else
{
printf("\nEND");
do{
printf("<-%c",p->data);
p=p->next;
}while(p!=NULL);
printf("<-head\n");
}
}
main()
{
NODE *h;
h=creatlist();
output(h);
}
这是一个简单的头指针法,请问一下,为什么我的输出会多个问号的,不知道哪里错了,大家帮我指出好吗?谢谢!

------解决方案--------------------
C/C++ code
    NODE *p;
    p=h->next;//这儿改下就好了
    if(p==NULL)
        printf("The list is NULL");

------解决方案--------------------
h=(NODE *)malloc(sizeof(NODE));
h->next=NULL;

申请了一个h的空间后,没有初始化h的数据。
试试这样:
h=(NODE *)malloc(sizeof(NODE));
h->next=NULL;
h->data = '\0';