构造及输出两个单链表

我是想创造两个链表,然后输出来着,但是输出好像是其他的数字,链表一长就有问题了

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

#define TRUE 1            //预定义常量 
#define FALSE 0
#define OK 1
#define ERROR 0

typedef struct LNode
{
    int num;
    LNode *next;
}LNode, *LinkList;
 
int InitList(LNode *L)
{
    L=(LNode*)malloc(sizeof(LNode));
    L->next=NULL;
    return OK;
}

int ListInsert(LNode *L,int i,int e)
{
    LinkList p=L,s;int j=0;
    while(p && (j<i-1))
    {
        p=p->next;++j; 
    }
    if(!p||j>1) return ERROR;
    s=(LNode*)malloc(sizeof(LNode));
    s->num=e;
    s->next=p->next;
    p->next=s;
    return OK; 
}

int ListDelete(LNode *L,int i)
{
    LinkList p=L,q;int j=0;
    while(p && (j<i-1))
    {
        p=p->next;++j; 
    }
    if(!p->next||j>i-1) return ERROR;
    q=p->next;
    p->next=q->next;
    free(q);
}

int print(LNode *L,int length)
{
    LNode *p=L;
    int i;
    for(i=0;i<length;i++)
    {
        p=p->next;
        printf("%d ",p->num);        
    }
    printf("\n");
    return OK;
} 

int CreateLinkList(LNode *L,int length)
{
    int i,data;
    printf("输入链表中的数据:");
    for(i=0;i<length;i++)
    {
        scanf("%d",&data); 
        ListInsert(L,i+1,data);
    }
    return OK;
}

int main()
{
    int m,n,i,data;
    LNode a,b,*A=&a,*B=&b,*p;
    InitList(A);InitList(B);
    printf("输入A,B链表的长度:");
    scanf("%d %d",&m,&n);
    CreateLinkList(A,m);
    CreateLinkList(B,n);
                                            
    print(A,m);
    print(B,n);
}


![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/81707514564619.jpg "#left")


初始化函数写法错误,这么初始化是不能修改外部A和B指针的指向的,如果用指针为参数,应该用指针的指针作为参数,或者返回值是指针,修改如下:(修改处已加注释)

#include<stdio.h>
#include<stdlib.h>
 
#define TRUE 1            //预定义常量 
#define FALSE 0
#define OK 1
#define ERROR 0
 
typedef struct LNode
{
    int num;
    LNode *next;
}LNode, *LinkList;
 
int InitList(LNode **L)   //将参数改为指针的指针
{
    *L=(LNode*)malloc(sizeof(LNode));      //L改为*L
    (*L)->next=NULL;            //L改为*L
    return OK;
}
 
int ListInsert(LNode *L,int i,int e)
{
    LinkList p=L,s;int j=0;
    while(p && (j<i-1))
    {
        p=p->next;++j; 
    }
    if(!p) return ERROR;    //去掉 j>1条件,只要p不为空就可以了啊
    s=(LNode*)malloc(sizeof(LNode));
    s->num=e;
    s->next=p->next;
    p->next=s;
    return OK; 
}
 
int ListDelete(LNode *L,int i)
{
    LinkList p=L,q;int j=0;
    while(p && (j<i-1))
    {
        p=p->next;++j; 
    }
    if(!p->next||j>i-1) return ERROR;
    q=p->next;
    p->next=q->next;
    free(q);
}
 
int print(LNode *L,int length)
{
    LNode *p=L;
    int i;
    for(i=0;i<length;i++)
    {
        p=p->next;
        printf("%d ",p->num);        
    }
    printf("\n");
    return OK;
} 
 
int CreateLinkList(LNode *L,int length)
{
    int i,data;
    printf("输入链表中的数据:");
    for(i=0;i<length;i++)
    {
        scanf("%d",&data); 
        ListInsert(L,i+1,data);
    }
    return OK;
}
 
int main()
{
    int m,n,i,data;
    LNode a,b,*A=&a,*B=&b,*p; 
    InitList(&A);InitList(&B);        //参数改为A和B的地址 
    printf("输入A,B链表的长度:");
    scanf("%d %d",&m,&n);
    CreateLinkList(A,m);
    CreateLinkList(B,n);
                                            
    print(A,m);
    print(B,n);
    system("pause");
    return 0;
}