链表相关问题,不知道哪里出错了,求大佬看看?

void InitList(LinkList &L)
{
    L = (LinkList)malloc(sizeof(LNode));
    if (!L)
        exit(OVERFLOW);
    L->next = nullptr;
}
Status ListEmpty(LinkList L)
{
    if (L->next)
        return FALSE;
    else
        return TRUE;
}
int ListLength (LinkList L)
{
    LinkList q;
    q = L->next;
    int i = 0;
    while (q)
    {
        i++;
        q = q->next;
    }
    return i;
}
int main()
{
    LinkList L;
    ElemType e;
    Status i;
    int j, k;
    InitList(L);  //构造一个空的链表
    for (j = 1; j <= 5; j++)
    {
        ListInsert(L, 1, j);  //在链表L的第一个元素之前插入j
    }
    for (j = 1;j <= 5; j++)
    {
        L = L->next;
        printf("%d\n", L->date);
    }
    i = ListEmpty(L);
    printf("是否为空表? i =%d(1:是,0:否),表L的长度 = %d\n",i, ListLength(L));
    system("pause");
        return 0;
}

图片说明

求大佬看一下啊 为什么前边输出了54321 后边还显示为空表啊 ,自己折腾了半天 没弄明白哪里错了

for (j = 1;j <= 5; j++)
{
    L = L->next;
    printf("%d\n", L->date);
}

这代码将L拨到后面去了
可以写
LinkList L1 = L;
for (j = 1;j <= 5; j++)
{
L = L->next;
printf("%d\n", L->date);
}
L = L1;
...

你输出时候用了
L=L->next
L被迭代了,所以你输出完以后,L实际上移动到了链表尾部。