C语言线性链表建立问题

编译通过,输入数据就崩了。代码如下。
#include
#include

typedef int ElementType;
typedef struct Node *PtrToNode;
struct Node {
ElementType Data;
PtrToNode Next;
};
typedef PtrToNode List;

List Read()
{
List L,p;
p = L = (List)malloc(sizeof(struct Node));
int i,size;
scanf("%d",&size);
if(size<=0){
printf("size is error!");
exit(0);
}
for( i=1 ; i<=size ; i++){
p = p->Next;
p = (List)malloc(sizeof(struct Node));
scanf("%d",&(p->Data));
}
p->Next = NULL;
return L;
}
void Print( List L )
{
List p;
p = L->Next;
while(p!=NULL){
printf("%d",p->Data);
p = p->Next;
}
}
//List Merge( List L1, List L2 );

int main()
{
List L1, L2, L;
L1 = Read();
// L2 = Read();
// L = Merge(L1, L2);
Print(L1);
// Print(L1);
// Print(L2);
return 0;
}

你把read的中的函数改一下试试

 List Read()
{
    List L,p,p1;
    p = L = (List)malloc(sizeof(struct Node));
    int i,size;
    scanf("%d",&size);
    if(size<=0)
    {
        printf("size is error!");
        exit(0);
    }
    for( i=1 ; i<=size ; i++)
    {
        p1 = (List)malloc(sizeof(struct Node));
        p->Next=p1;
        scanf("%d",&(p1->Data));
        p=p1;
    }
    p->Next = NULL;
    return L;
}