C语言链表销毁(free函数)

#include 

typedef int ElemType;
typedef struct LNode
{
    ElemType data;
    struct LNode *next;
}LinkNode;
void InitList(LinkNode **L){
    (*L)=(LinkNode*) malloc(sizeof(LinkNode));
    (*L)->next=NULL;
}
void CreateListF(LinkNode **L, ElemType a[], int n)
{   LinkNode *s;//printf("%d\n",L);printf("%d\t%d\n",L->data,L->next);
    //(*L)=(LinkNode*)malloc(sizeof(LinkNode));
    //(*L)->next=NULL;
    for(int i=0;imalloc(sizeof(LinkNode));
        s->data=a[i];
        s->next=(*L)->next;
        (*L)->next=s;
    }
}
void CreateListT(LinkNode **L, ElemType a[], int n){
    LinkNode *s, *r;
    r=*L;
    for(int i=0;imalloc(sizeof (LinkNode));
        s->data=a[i];
        r->next=s;
        r=s;
    }
    r->next=NULL;
}
void DispList(LinkNode **L){
    LinkNode *p=(*L)->next;
    //printf("%p %p %p %d ",p->next,(*L)->next,p,p->data);
    while(p!=NULL){
        //p=p->next;
        printf("%d\t",p->data);
        p=p->next;
    }
    printf("\n");
}
void DestroyList(LinkNode **L){
    LinkNode *pre=*L, *p=(*L)->next;
    while(p!=NULL){
        free(pre);
        pre=p;
        p=pre->next;
    }
    free(pre);

}
int main(){
    LinkNode *L=NULL;
    //printf("l1=%d\n",L->next);
    //printf("l8=%d\n",&L);
    ElemType a[]={2,1};
    int lenth= sizeof(a)/ sizeof(a[0]);
    InitList(&L);
    //CreateListF(&L,a,4);
    CreateListT(&L,a,lenth);
    DispList(&L);
    DestroyList(&L);
    CreateListF(&L,a,4);
    DispList(&L);
}

为什么输出后会是这样(一直循环)

img

主函数里,销毁链表函数调用结束后,再调用头插法生成链表函数之前,需再调用一次初始化链表函数。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^