程序有段错误,我找不到,大神帮帮忙!

题目:已知两个非降序链表序列S1与S2,设计函数构造出S1与S2合并后的新的非降序链表S3。

输入格式:

输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。

输出格式:

在一行中输出合并后新的非降序链表,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL

输入样例:

1 3 5 -1
2 4 6 8 10 -1

输出样例:

1 2 3 4 5 6 8 10

我的代码:

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

typedef struct LNode
{
    int data;
    struct LNode *next;
} LNode,*LinkList;

LinkList read(){
    int n;
    LinkList s,p,head; 
    scanf("%d",&n);
    head=s=(LinkList)malloc(sizeof(LNode));
    while(n!=-1)
    {
        p=(LinkList)malloc(sizeof(LNode));
        p->data=n;s->next=p;s=p;
        scanf("%d",&n);
    }    
    s->next=NULL;
    return(head->next);
}

LinkList MergeList_L(LinkList pa,LinkList pb){
    LinkList Lc,pc;
    pc=Lc=(LinkList)malloc(sizeof(LNode));pc->next=NULL;
    while(pa&&pb)
    {
        if(pa->data>pb->data)
        {
            pc->next=pb;pc=pb;pb=pb->next;
        }
        else 
        {
            pc->next=pa;pc=pa;pa=pa->next;
        }
    }
    pc->next=pa?pa:pb;
    return(Lc->next);

void print_L(LinkList Lc){
    LinkList s;
    s=Lc;
    if(Lc->next==NULL)printf("NULL");
    else {
            while(s->next)
            {
                printf("%d ",s->data);s=s->next;
            }
            printf("%d",s->data);
          }
}

int main()
{
    int n;
    LinkList La;LinkList Lb;LinkList Lc;
    La=read();
    Lb=read();
    Lc=MergeList_L(La,Lb);
    print_L(Lc);
return 0; 
}

作业系统提交结果:

LinkList s,p,head; 
    scanf("%d",&n);
    head=s=(LinkList)malloc(sizeof(LNode));

需要改成指针

LinkList *s, *p, *head;

head = s = (LinkList *)malloc(sizeof(LNode));

还有其他分配的地方也需要用指针。

你可以改了以后再试,如果还有其他问题可以再提出来。