C++单链表初始化代码运行疑问

有以下两段代码,为什么第一段无法运行显示未初始化 L

疑问:

1.我使用了初始化函数,可是为什么显示未初始化?
2.该怎么修改?
3.从代码上理解我觉得这两个实现的功能都一样,为什么第一段初始化失败了?

#include <iostream>
using namespace std;

struct Node
{
    int data;
    struct Node* next;
};

typedef struct Node LNode;

void InitLinkList(LNode* l)
{
    l = new LNode;
    l->next = NULL;
}

int main()
{
    Node* L;
    InitLinkList(L);

    system("pause");
    return 0;
}
#include <iostream>
using namespace std;

struct node
{
    int data;
    struct node* next;
};

typedef struct node lnode;

int main()
{
    node* L;
    L = new node;
    L->next = NULL;

    system("pause");
    return 0;
}