经常遇到Segmentation这个错误,看了300遍

问题遇到的现象和发生背景

输入输出一个学生信息


#include<bits/stdc++.h>
using namespace std;
struct ElementType{
    char id[20];
    char name[30];
    char sex[5];
    double x,y,z;
};
typedef struct Node{
    ElementType data;
    struct Node *next; 
}Node,*LinkList;
LinkList createList()               //创建单链表 
{
    LinkList L;
    L=(LinkList)malloc(sizeof(Node));
    L->next=NULL;
}
int find(LinkList L,LinkList S)
{
    LinkList p;
    p=L->next;
    while(p!=NULL){
        if(strcmp(p->data.id,S->data.id)==0) return 0;
        p=p->next;
    }
    return 1;
}
LinkList input()
{
    LinkList S;
    S=(LinkList)malloc(sizeof(Node));
    scanf("%s%s%s",S->data.id,S->data.name,S->data.sex);
    scanf("%lf%lf%lf",&S->data.x,&S->data.y,&S->data.z);
    return S;
}
void charu(LinkList L,LinkList S)
{
    LinkList p,pre;
    pre=L;
    p=L->next;
    while(p!=NULL){
        pre=p;
        p=p->next;
    }
    S->next=pre->next;
    pre->next=S;
}
void output(LinkList S)
{
    printf("%s %s %s ",S->data.id,S->data.name,S->data.sex);
    printf("%.1f %.1f %.1f\n",S->data.x,S->data.y,S->data.z);
}
int main(){
    char order[20];
    LinkList L;
    LinkList S;
    L=createList(); 
    while(1){
        scanf("%s",order);
        if(!strcmp(order,"Insert")){
            puts("Insert:");
            S=input();
            if(find(L,S)){
                charu(L,S);
                output(S);
            }
            else printf("Failed\n");
        }
        else{
            puts("Good bye!");
            break;
        }
    }
    return 0;
}

img

问题相关代码,请勿粘贴截图
运行结果及报错内容

Error:Segmentation

我的解答思路和尝试过的方法
我想要达到的结果