单链表输出,为何输出不了

#include<stdio.h>
#include<stdlib.h>
typedef struct lnode{
    int data;
    lnode*next;
}lnode,*linklist;

void creatlist(lnode*l){
    int x;
    lnode*p;
    l=(lnode*)malloc(sizeof(lnode)); 
    p=l;
    scanf("%d",&x);
    while(x!=0)
    {   
        p->next=(lnode*)malloc(sizeof(lnode));
        p=p->next;
        p->data=x;
        scanf("%d",&x);
    }
    p->next=NULL;
}

void displist(lnode*l){
    lnode*p;
    p=l->next;//p指向开始结点
    while(p!=NULL){
        printf("%d",p->data); //输出数据域
        p=p->next;
    }
    printf(" ");

} 


main(){
    lnode l;
    creatlist(&l);
    displist(&l);

}
#include<stdio.h>
#include<stdlib.h>
typedef struct lnode{
    int data;
    lnode*next;
}lnode, *linklist;

void creatlist(lnode**l){
    int x;
    lnode*p;
    *l = (lnode*)malloc(sizeof(lnode));
    p = *l;
    scanf("%d", &x);
    while (x != 0)
    {
        p->next = (lnode*)malloc(sizeof(lnode));
        p = p->next;
        p->data = x;
        scanf("%d", &x);
    }
    p->next = NULL;
}

void displist(lnode*l){
    lnode*p;
    p = l->next;//p指向开始结点
    while (p != NULL){
        printf("%d", p->data); //输出数据域
        p = p->next;
    }
    printf(" ");

}


int main(){
    lnode *l;
    creatlist(&l);
    displist(l);
    return 0;
}