c++数据结构指针内存问题

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

出现报错LinuxExecutorSeccomp.cpp(267): terminate signal: SIGSEGV

用代码块功能插入代码,请勿粘贴截图
# include 
# include 
# include 
using namespace std;


typedef struct Node
{
    int elem;
    struct  Node *next;
}*Linklist;
void inlinklist(Linklist &l, int n)
{
    l = (Linklist)malloc(sizeof(Node));
    l->next = NULL;
    Linklist p, END;//定义尾部节点
    END = l;
    for(int i = 0; i < n; i++)
    {
        p = (Linklist)malloc(sizeof(Node));
        scanf("%d", &p->elem);
        int* a = &p->elem;
        if (*a==-1) {
            break;
        }
        END -> next = p;
        p->next = NULL;
        END = p;
    }
}
void outlinklist(Linklist l)
{
    Linklist  p;
    p = l->next;
    while(p != NULL)
    {
        printf("%d ", p->elem);
        p = p->next;
    }
//    printf("\n");
}

void delorder_repeat(Linklist &l)
{
    Linklist p, q;
    p = l->next;
    q = (Linklist)malloc(sizeof(Node));
    while(p->next)
    {
        if(p->next->elem == p->elem)
        {
            q = p->next;
            p->next = q->next;
            free(q);
        //    q=0; 
        }
        else
            p = p->next;
    }
}

int main()
{
    Linklist l;
    int n = 50;

    inlinklist(l, n);
    delorder_repeat(l);
    outlinklist(l);

    return 0;
}


我想要达到的结果

没有报错

把你的测试数据提供一下,你都输入了什么