malloc多分配内存

我明明分配五个空间但是遍历结果时却多出一个内存地址

#include <stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
typedef struct LNode {
ElemType data; //结点的数据域
struct LNode *next; //结点的指针域
} LNode, LinkList; //LinkList为指向结构体LNode的指针类型
Status InitList_L(LinkList *L)
{
//构造一个空的单链表L
L = (LNode *)malloc(sizeof(LNode)); //生成新结点作为头结点,用头指针L指向头结点
L->next = NULL; //头结点的指针域置空
return OK;
}
void CreateList_L(LinkList *L,int n)
{
for(int i=0;i<n;i++){
LNode *p=(LNode *)malloc(sizeof(LNode));
scanf("%d",&p->data);
p->next=L->next;
L->next=p;
L=L->next;
}
}
//在此处定义单链表的插入函数ListInsert_L
void ListInsert_L(LinkList *L,int n,int m){
int i=1;
LNode *p=L->next;
while(p!=NULL){
printf("%d",p->data);
if(p->next!=NULL){
printf(",");
}
p=p->next;
}

printf("\n");
p=L->next;
while(i!=n){
    p=p->next;
    i++;
}
if(i==n){
    LNode *s=(LNode *)malloc(sizeof(LNode));
    s->data=m;
    s->next=p->next;
    p->next=s;
}
p=L->next;
while(p!=NULL){
    printf("%d",p->data);
    p=p->next;
    if(p!=NULL){
        printf(",");
    }
}

}
int main()
{
LinkList L; //用LinkList L;替换,与#include "LinkList.h"配合
int n,i;
ElemType e;
InitList_L(&L);
scanf("%d",&n); //输入元素个数
CreateList_L(&L,n);
int m;
scanf("%d%d",&i,&m); //输入插入元素的位置和元素
ListInsert_L(&L,i,m);

return 0;

}

img

InitList_L(&L);这里L已经定义了实例,但到函数内有malloc是不行的

#include <stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
typedef struct LNode {
    ElemType data; //结点的数据域
    struct LNode *next; //结点的指针域
} LNode, LinkList; //LinkList为指向结构体LNode的指针类型
Status InitList_L(LinkList *L)
{
    //构造一个空的单链表L
    L = (LNode *)malloc(sizeof(LNode)); //生成新结点作为头结点,用头指针L指向头结点
    L->next = NULL; //头结点的指针域置空
    return OK;
}
void CreateList_L(LinkList *L,int n)
{
    for(int i=0;i<n;i++){
        LNode *p=(LNode *)malloc(sizeof(LNode));
        scanf("%d",&p->data);
        p->next=L->next;
        L->next=p;
        L=L->next;
    }
}
//在此处定义单链表的插入函数ListInsert_L
void ListInsert_L(LinkList *L,int n,int m){
    int i=1;
    LNode *p=L->next;
    while(p!=NULL){
        printf("%d",p->data);
        if(p->next!=NULL){
            printf(",");
        }
        p=p->next;
    }

    printf("\n");
    p=L->next;
    while(i!=n){
        p=p->next;
        i++;
    }
    if(i==n){
        LNode *s=(LNode *)malloc(sizeof(LNode));
        s->data=m;
        s->next=p->next;
        p->next=s;
    }
    p=L->next;
    while(p!=NULL){
        printf("%d",p->data);
        p=p->next;
        if(p!=NULL){
            printf(",");
        }
    }
}
int main()
{
    LinkList L; //用LinkList L;替换,与#include "LinkList.h"配合
    int n,i;
    ElemType e;
    //InitList_L(&L);
    L.next = NULL;
    scanf("%d",&n); //输入元素个数
    CreateList_L(&L,n);
    int m;
    scanf("%d%d",&i,&m); //输入插入元素的位置和元素
    ListInsert_L(&L,i,m);
    return 0;
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632