头插法建立单链表运行不出正确结果

我写的头插法建立单链表如下,但是运行出来的结果是错的,不知道是代码哪里写错了呢?

#include
#include
#pragma warning(disable:4996);

typedef struct LinkList {
    int data;
    struct LinkList* next;
}Linklist;

void List_headinsert(LinkList* L) {
    LinkList* node;
    int x;
    scanf("%d", &x);
    L = (LinkList*)malloc(sizeof(LinkList));
    while (x != -1) {    //输入-1跳出
        node = (LinkList*)malloc(sizeof(LinkList));
        node->data = x;
        node->next = L->next;
        L->next = node;
        scanf("%d", &x);
    }
}

int main() {
    Linklist l;
    LinkList* L;
    L = &l;

    List_headinsert(L);

    while (L != NULL) {    //打印单链表
        printf("%d ", L->data);
        L = L->next;
    }

    return 0;
}

修改见注释,供参考:

#include <stdio.h>
#include <stdlib.h>
#pragma warning(disable:4996);

typedef struct LinkList {
    int data;
    struct LinkList* next;
}Linklist;

void List_headinsert(LinkList** L) { //修改 LinkList* L
    LinkList* node;
    int x;
    scanf("%d", &x);
    (*L) = (LinkList*)malloc(sizeof(LinkList)); //修改
    (*L)->next = NULL;                           //修改
    while (x != -1) {    //输入-1跳出
        node = (LinkList*)malloc(sizeof(LinkList));
        node->data = x;
        node->next = (*L)->next; //修改
        (*L)->next = node;       //修改
        scanf("%d", &x);
    }
}

int main() {
    //Linklist l; //修改 定义的 l 是变量,它的空间已经分配了,是静态的,在这代码里是多余的。
    LinkList* L, * p;
    L = NULL; //L = &l; 修改

    List_headinsert(&L); //修改

    p = L->next;          //修改
    while (p != NULL) {    //打印单链表
        printf("%d ", p->data); //修改
        p = p->next;      //修改
    }
    return 0;
}

数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633

给你找了一篇非常好的博客,你可以看看是否有帮助,链接:尾插法建立单链表并输出