求大家看一下C语言出现段错误的原因!


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

typedef struct LNode{
    int date;
    int length;
    struct LNode *next;
}LNode,*LinkList;

void InitList(LinkList *L);
void InsertList(LinkList *L,int N);
void Turn(LinkList *L);
int DeleteThree(LinkList *L);

int main(){
    int N,k;
    scanf("%d",&N);
    LinkList L;
    InitList(&L);
    InsertList(&L,N);
    Turn(&L);
    k=DeleteThree(&L);
    printf("%d",k);
    return 0;
}

void InitList(LinkList *L){
    *L=(LNode*)malloc(sizeof(LNode));
    (*L)->next=NULL;
}

void InsertList(LinkList *L,int N){
    LinkList s;
    int i;
    for(i=N;i>=1;i--){
        s=(LNode*)malloc(sizeof(LNode));
        s->date=i;
        s->next=(*L)->next;
        (*L)->next=s;
        (*L)->length++;
    }
}

void Turn(LinkList *L){
    LinkList p=*L;
    while(p->next!=NULL){
        p=p->next;
    }
    p->next=(*L)->next;
}

int DeleteThree(LinkList *L){
    int i;
    LinkList p;
    LinkList q;
    p=(*L)->next;
    do{
        p=p->next;
        q=p->next;
        p=q->next;
        free(q);
        (*L)->length--; 
    }while((*L)->length!=2);
    return p->next->date;
}

PTA的一道题目,编译成功,但是出现段错误,请带佬帮一下,编码入门,请求帮助!!

你这DeleteThree和Turn函数的目的是什么呢?
InitList函数中应该为*L的data和length赋予初始值0
错误在DeleteThree上,free(q)肯定有问题,q释放后,链表就断了啊

有题目链接吗?
我看一下