C语言数据结构链表尾插法有关问题!求解释

C语言数据结构链表尾插法问题!求解释
老是没有结果,求大牛帮忙解释下原因,实在是没搞懂!到底问题出在哪里?
C/C++ code

typedef struct LNode{
    ElemType date;
    struct LNode *next;
}*LinkList;

//Initial LinkList
void InitL(LinkList &L){
    L = (LinkList)malloc(sizeof(LNode));//we just need a RAM directory to told us where the LinkList is.
    L->next = NULL;
}

//Create LinkList
void CreateL(LinkList &L){
    int len;    //Firstly,we need to known the length of the LinkList.
    printf("Please input L length:");
    scanf("%d", &len);
    for(int i = 0 ; i < len; i++){
        LinkList p = (LinkList)malloc(sizeof(LNode));    //or LinkList p = new LNode(c++)
        if(!p)
            printf("Error\n");
        printf("Please input LinkList number:");
        scanf("%d", &p->date);
                  //tail insert
                  L->next = p;
                  L = p;
    }

}


------解决方案--------------------
引用参数以&开头,除可供输入值外,还将返回操作结果。你是按照书上课本打的吧。我想告诉你那是算法。不一定代码就是它。你要变成代码需要改动。如果你已经定义了L为指针。那你为什么还要加&。你画蛇添足啊?
我也不是很懂。
------解决方案--------------------
探讨
...
2.我自己将InitL(LinkList &amp;L)改成了InitL(LinkList L)之后,原来的代码就可以运行了...