自定义的Createlist函数不知道哪里有问题

打印的时候输入两次就断了,不知道为啥

img

img

img

img


{
#include <stdio.h>
#include<stdlib.h>
typedef struct Lnode
{
int data;
struct Lnode *next;
} Lnode,*Linklist;
void Createlist(Linklist &L,int n)
{
int i=1;
Lnode p;
L=(Lnode
)malloc(sizeof(Lnode));
p=L;

  while(i<=n)
   {
   printf("输入链表第%d个元素的值",i);
     scanf("%d",&(p->data));
     p=p->next;
     i++;
   }

}
void ListInsert(Linklist &L,int i,int e,int n)
{
Lnode *p,q;
int j=1;
q=(Lnode
)malloc(sizeof(Lnode));
q->data=e;
p=L->next;
while(p&&(j<i-1)&&(i<n))
{
printf("%d,",p->data);
p=p->next;
j++;
}
if(!p||j>i-1||i>n) printf("不合法\n");
q->next=p->next;
p->next=q;
}
int main()
{
int i,e,n;
Lnode *L;
L=(Lnode *)malloc(sizeof(Lnode));
printf("请输入需要链表的元素个数\n");
scanf("%d",&n);
Createlist(L,n);
printf("请输入要插入元素的位序\n");
scanf("%d",&i);
printf("请输入要插入的数值\n");
scanf("%d",&e);
printf("请输入原链表元素个数\n");
scanf("%d",&n);
ListInsert(L,i,e,n);
return 0;
}

}

供参考:

#include <stdio.h>
#include<stdlib.h>
typedef struct Lnode
{
    int data;
    struct Lnode *next;
}Lnode,*Linklist;
void Createlist(Linklist &L,int n)
{
    int i=1;
    Lnode *p=L,*q;                  //修改,增加 q 指针变量
    //L=(Lnode)malloc(sizeof(Lnode)); //修改
    //p=L;                            //修改
    while(i<=n)
    {
       q=(Lnode*)malloc(sizeof(Lnode));//修改
       printf("输入链表第%d个元素的值",i);
       scanf("%d",&q->data); //修改
       q->next=NULL;         //修改
       p->next=q;            //修改 尾插法
       p=q;                  //修改
       i++;
    }
}
void ListInsert(Linklist &L,int i,int e)//修改
{
    Lnode *p,*q;
    int j=1;
    p=L->next;
    while(p && j<i-1)//修改
    {
        //printf("%d,",p->data);//修改
        p=p->next;
        j++;
    }
    if(!p || i<1 || j<i-1)//修改
    {
        printf("不合法\n");
        return;          //修改
    }
    q=(Lnode*)malloc(sizeof(Lnode));//修改 移到这里,上面判断没问题再申请空间
    q->data=e;
    q->next=NULL;
    if(i==1)p=L;  //修改 判断是否在第一个结点插入
    q->next=p->next;
    p->next=q;
}
void print(Linklist L) //增加打印输出函数
{
    Linklist p=L->next;
    while(p)
    {
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");
}
int main()
{
    int i,e,n;
    Lnode *L;
    L=(Lnode *)malloc(sizeof(Lnode));
    printf("请输入需要链表的元素个数\n");
    scanf("%d",&n);
    Createlist(L,n);
    print(L);      //增加打印输出看结果

    printf("请输入要插入元素的位序\n");
    scanf("%d",&i);
    printf("请输入要插入的数值\n");
    scanf("%d",&e);
    //printf("请输入原链表元素个数\n");//修改
    //scanf("%d",&n);                  //修改
    ListInsert(L,i,e);                 //修改
    print(L);                         //增加打印输出看结果

    return 0;
}


C语言有引用吗

Createlist函数只建了一个结点。