c语言链表,删掉相应内容

问题遇到的现象和发生背景

#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
int data;
struct Node *next;
} Llink;

Llink *Creatb(Llink *l){
Llink p;
p=(Llink
)malloc(sizeof(Llink));
p->next=NULL;
l=p;
return l;
}

void Getb(Llink *l,int n)
{
Llink *q;
q=l;
for(int i=0;i<n;i++)
{
Llink *p;
p=(Llink*)malloc(sizeof(Llink));
scanf("%d",&p->data);
p->next=NULL;
q->next=p;
q=p;

 }
 

}
void Deletb(Llink *l,int n)
{
Llink *q;
q=l;
while(q->next){
if(q->next->data==n){
Llink *p;
p=l->next;
q->next=p->next;
free(p);
}
q=q->next;
}

}
void Putb(Llink *l)
{
while(l->next)
{
printf("%d",l->data);
l=l->next;
}
}

int main()
{
Llink *l;
l=Creatb(l);
int a;
scanf("%d",&a);
Getb(l,a);
int n;
scanf("%d",&n);
Deletb(l,n);
Putb(l);

}
我这个代码哪里不对吗?请各位指教

问题相关代码,请勿粘贴截图
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

修改处见注释,供参考:

#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
    int data;
    struct Node *next;
}Llink;

Llink *Creatb(){  //Llink *Creatb(Llink *l) 修改
    Llink *p;
    p=(Llink*)malloc(sizeof(Llink));
    p->next=NULL;
                 //l=p; 修改
    return p;    //修改
}

void Getb(Llink *l,int n)
{
    Llink *q;
    q=l;
    for(int i=0;i<n;i++)
    {
       Llink *p;
       p=(Llink*)malloc(sizeof(Llink));
       scanf("%d",&p->data);
       p->next=NULL;
       q->next=p;
       q=p;
    }
 
}
void Deletb(Llink *l,int n)
{
    Llink *q;
    q=l;
    while(q->next){
        if(q->next->data==n){
           Llink *p;
           p=q->next; // p=l->next; 修改
           q->next=p->next;
           free(p);
        }
        else         //修改
           q=q->next;
    }
}
void Putb(Llink *l)
{
    while(l->next)
    {
        printf("%d ",l->next->data); //printf("%d",l->data); 修改
        l=l->next;
    }
}

int main()
{
    Llink *l;
    l=Creatb(); //l=Creatb(l); 修改
    int a;
    scanf("%d",&a);
    Getb(l,a);
    int n;
    scanf("%d",&n);
    Deletb(l,n);
    Putb(l);
    
    return 0;
}