这段代码哪错了,显示段异常?

#include <stdio.h>
#include <stdlib.h>
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*Link;

void hInsert(Link *h,int n){
LNode *s;
int i;
*h=(Link)malloc(sizeof(LNode));
(*h)->next=NULL;

for(i=0;i<n;i++){
s=(Link)malloc(sizeof(LNode));
s->data=1;
s->next=(*h)->next;
(*h)->next=s;
}
}
void l(Link h){
LNode *p=h->next;
while(p!=NULL){
printf("%d\n",p->data);
p=p->next;
}

}

int main()
{
Link h=NULL;
hInsert(&h,5);
l(h);
return 0;
}

你的语法是错误的,(h)后面不能用→,用→就不能用号。如果还不理解的话,可以问我,

这段代码没有问题啊:

#include <stdio.h>
#include <stdlib.h>
typedef struct LNode {
    int data;
    struct LNode* next;
}LNode, * Link;

void hInsert(Link* h, int n) {
    LNode* s;
    int i;
    (*h) = (Link)malloc(sizeof(LNode));
    (*h)->next = NULL;

    for (i = 0; i < n; i++) {
        s = (Link)malloc(sizeof(LNode));
        s->data = 3;
        s->next = (*h)->next;
        (*h)->next = s;
    }
}
void l(Link h) {
    LNode* p = h->next;
    while (p != NULL) {
        printf("%d\n", p->data);
        p = p->next;
    }

}

int main()
{
    Link h = NULL;
    hInsert(&h, 5);
    l(h);
    return 0;
}