请问为什么尾插法的数据输出不了?
#include<stdio.h>
#include<stdlib.h>
typedef struct linklist{
int val;
struct linklist *next;
}Node,*linkList;
void createlist1(linkList *L,int n){
Node *node = NULL;
*L = malloc(sizeof(linkList));
(*L)->next = NULL;
node = (*L) -> next;
while(n){
node = malloc(sizeof(Node));
scanf("%d",&(node)->val);
node -> next = (*L) -> next; //头插法
(*L) -> next = node;
n--;
}
}
void createlist2(linkList *L,int n){
Node *node;
linkList *p;
*L = (linkList)malloc(sizeof(linkList));
(*L)->next = NULL;
(*L)->next = 0;
p = L;
while(n){
node = malloc(sizeof(Node));
scanf("%d",&(node)->val); //尾插法
(*p)->next = node;
(*p) = node;
n--;
}
(*p) -> next = NULL;
}
void insert(linkList *L){
printf("选择插入的位置:");
int n;
scanf("%d",&n);
linkList p = (*L);
while(n>1){
p = p->next;
n--;
}
printf("输入要插入的元素:");
Node *node = malloc(sizeof(Node));
scanf("%d",&node -> val);
node -> next = p->next;
p ->next = node;
}
void del(linkList *L){
int n;
linkList p = (*L);
printf("输入要删除的元素位置:");
scanf("%d",&n);
while(n){
p = p -> next;
n--;
}
p -> val = p -> next -> val;
p -> next = p -> next -> next;
}
void print(linkList L){
linkList p = L->next;
while(p){
printf("%d",p->val);
printf(" ");
p = p->next;
}
}
int main(){
linkList L1,L2;
int n;
printf("输入链表长度:");
scanf("%d",&n);
createlist1(&L1,n);
printf("(头插法)链表中的元素为:");
print(L1);
printf("\n");
createlist2(&L2,n);
printf("(尾插法)链表中的元素为:");
print(L2);
printf("\n");
insert(&L2);
printf("插入后:");
print(L1);
printf("\n");
del(&L1);
printf("删除后的:");
print(L1);
}