求教。小弟我想建立一个动态的单链表,两次输入分别确定元素的个数个元素中一个成员的值,然后再主函数中调用并输出单链表。但是小弟我写的这个如何不对。

求教。。。我想建立一个动态的单链表,两次输入分别确定元素的个数个元素中一个成员的值,然后再主函数中调用并输出单链表。。。但是我写的这个怎么不对。。
#include <stdio.h>
#define null 0
#include <malloc.h>
typedef struct Lnode
{int data;
struct Lnode *next;
}Linklist;
Linklist *create()
{Linklist *h,*p,*s;
int i,n;
printf("请输入链表元素的个数");
n=scanf("%d",&n);
h=(Linklist *)malloc(sizeof(Linklist));
s=h;
for(i=1;i<=n;i++)
{p=(Linklist *)malloc(sizeof(Linklist));
printf("请输入数据的值");
scanf("%d",&p->data);
h->next=p;
h=p;
p->next=null;
}
return s;
}
main()
{Linklist *q;
q=create();
while(q->next!=null)
{printf("%d",q->data);
q=q->next;
}

}
------解决方案--------------------

#include <stdio.h>
#include <malloc.h>

#define null 0

typedef struct Lnode
{
int data;
struct Lnode *next;
}Linklist;

Linklist *create()
{
Linklist *h = NULL;
Linklist *p = NULL;
Linklist *s = NULL;
int i,n;
printf("请输入链表元素的个数");
scanf("%d",&n);    //////  ERR 1
h=(Linklist *)malloc(sizeof(Linklist));
s=h;
for(i=0;i < n;)   //ERR 2
{
if (i > 0)
{
h->next = (Linklist *)malloc(sizeof(Linklist));
h = h->next;
}
p=(Linklist *)malloc(sizeof(Linklist));
printf("请输入数据的值");
scanf("%d",&p->data);
h->data = p->data;
h->next = null;
++i;
}
return s;
}
main()
{
Linklist *q;
q=create();
while(q != null)  ///ERR 3
{
printf("%d\n",q->data);
q=q->next;
}
}