采用尾插法创建单链表后输出为空白

//链表的基本设置

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

typedef struct LNode{
    int data;
    struct LNode*next;
}LinkNode;  //单链表的结构体 

//尾插法整体创建单链表函数

void CreatLinkNode(LinkNode*L,int n){
    LinkNode*r;
    L = (LinkNode*)malloc(sizeof(LinkNode));
    L->next = NULL;
    r = L; //尾指针先指向头指针 
    int i;
    LinkNode*s;
    printf("请输入链表内的元素:\n");
    for(i=1;i<=n;i++){
        s= (LinkNode*)malloc(sizeof(LinkNode));
        scanf("%d",&s->data);
        r->next = s;
        r=s;
    }
    r->next =NULL;
}

//输出链表函数部分

void DisPlayLinkNode(LinkNode*L){
    LinkNode*p;
    p = L->next;
    printf("%d\t",p->data);
    while(p!=NULL){
        printf("%d\t",p->data);
        p = p->next;
    }
}

//主函数部分

int main(){
    int n;
    LinkNode L; 
    printf("请输入需要创建多少个结点:\n");
    scanf("%d",&n);
    CreatLinkNode(&L,n); 
    DisPlayLinkNode(&L);
    return 0;
}

错误结果:

img

修改如下,供参考:

#include <stdio.h>
#include <stdlib.h>
//#include <stdbool.h>
typedef struct LNode{
    int data;
    struct LNode*next;
}LinkNode;  //单链表的结构体

LinkNode* CreatLinkNode(LinkNode*L,int n){  //修改
    LinkNode *r;
    L = (LinkNode*)malloc(sizeof(LinkNode));
    L->next = NULL;
    r = L; //尾指针先指向头指针
    int i;
    LinkNode*s;
    printf("请输入链表内的元素:\n");
    for(i=1;i<=n;i++){
        s= (LinkNode*)malloc(sizeof(LinkNode));
        scanf("%d",&s->data);
        s->next=NULL;   //修改
        r->next = s;
        r=s;
    }
    //r->next =NULL;//修改
    return L;//修改
}

void DisPlayLinkNode(LinkNode *L){
    LinkNode*p;
    p = L->next;
                          //修改
    while(p!=NULL){
        printf("%d\t",p->data);
        p = p->next;
    }
}


int main()
{
    int n;
    LinkNode * L;//修改
    printf("请输入需要创建多少个结点:\n");
    scanf("%d",&n);
    L=CreatLinkNode(L,n);//修改
    DisPlayLinkNode(L);//修改
    
    return 0;
}