我的逻辑哪有问题,求大劳解决

//
TODO:创建单链表
功能:补全代码,完成创建单链表的功能,前台录入一串数据,用空格隔开,输入0后,按回车完成输入。
如果输入数字小于 0,提示:"输入数据非法,建立链表停止\n";单链表创建成功提示:"链表创建成功\n"
如录入:1 2 3 4 5 6 7 8 9 10 0,回车,创建成功的链表为 1 2 3 4 5 6 7 8 9 10
参数:Node *pNode 是需要操作的单链表
返回值:链表创建成功返回链表,链表创建失败则返回null。
*/
Node *creatList(Node *pNode) {
int i,n;
Node *p,q;
p=q=(Node
)malloc(sizeof(Node));
while(scanf("%d",&p->element)&&p->element!=0)
{

     if(p->element<0);
     printf("输入数据非法,建立链表停止\n");
     break;
     if(pNode=NULL)
         pNode=p;
         else
         q->next=p;
         q=p;
         p=(Node*)malloc(sizeof(Node));
         n++;
}
q->next=NULL;
printf("链表创建成功\n");

return pNode;

}*/

问题已经在下面代码中用注释标出。

Node *creatList(Node *pNode) {

    int i, n=0;
    Node *p,*q;
    p = q = (Node*)malloc(sizeof(Node));
    while (scanf("%d", &p->element) && p->element != 0)
    {
        if (p->element < 0)//你这里直接写了个“;”号,相当于if条件没起作用
        {
            printf("输入数据非法,建立链表停止\n");
            break;
        }
        if (pNode == NULL)//这里应该用==
            pNode = p;
        else
            q->next = p;
        q = p;
        p = (Node*)malloc(sizeof(Node));
        n++;//n记得初始化为0
    }
    q->next = NULL;
    printf("链表创建成功\n");
    return pNode;
}