关于创建链表的有关问题

关于创建链表的问题
#include<iostream>
using namespace std;
typedef struct LinkNode{
int data;
struct LinkNode *next;
}LinkNode,*LinkList;
void createLink(LinkList* L)
{
*L = new LinkNode;
(*L)->next=NULL;
LinkNode *node =NULL;
node = *L;
int m;
while (cin>>m)
{
LinkNode *newdoe = new LinkNode;
newdoe->data = m;
newdoe->next = NULL;
node->next=newdoe;
node=newdoe;
}

}

int main()
{

LinkList L=NULL;
createLink(&L);   //我这样写, 通过传递地址实现,


return 0;
}


#include<iostream>
using namespace std;
typedef struct LinkNode{
int data;
struct LinkNode *next;
}LinkNode,*LinkList;
void createLink(LinkList* L)
{
*L = new LinkNode;
(*L)->next=NULL;
LinkNode *node =NULL;
node = *L;
int m;
while (cin>>m)
{
LinkNode *newdoe = new LinkNode;
newdoe->data = m;
newdoe->next = NULL;
node->next=newdoe;
node=newdoe;
}

}

int main()
{

LinkList *L=NULL;
createLink(L);//这样写, 会存在错误,


return 0;
}


两个程序传递方式不同,指针的指针,指针,整的头大,谁可以帮忙理下思路,这两个程序,
第一个,我创建一个LinkNode指针, 我把指针的地址传递过去,然后就行内存分配,,,
第二个,我创建了一个LinkNode指针的指针,而把这个指针的指针,传递过去,进行后继操作会报错的。为什么呢?
------解决方案--------------------
你没有理解指针的概念,建议你单步跟一下看看。

第二个程序。
createLink(L);//这样写, 会存在错误,</span>
L==NULL,
createLink函数中,你想取L==NLL指向的类型,那肯定会错误的。

------解决方案--------------------
void createLink(LinkList* L)
这个只能改变L所指向的内存的内容,无法改变L本身的值
你要改成void createLink(LinkList*& L)


------解决方案--------------------
可不可以解释这段代码  <span style="color: #FF0000;">LinkList *L=NULL;
------解决方案--------------------
二级指针为NULL,当然不能给一级指针分配内存了
------解决方案--------------------
仅供参考
//假设带表头结点的单向链表头指针为head,试编写一个算法将值为5的结点插入到连接表的第k个结点前,删除第k个节点,并对该链表进行排序。
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <time.h>
struct NODE {
    int          data;
    struct NODE *next;
} H,*head,*p,*q,*s1,*s2,*s3,*s4,*s;
int i,j,k,n,t,m;
int main() {
    srand(time(NULL));

    //填写头节点数据
    H.data=-1;
    H.next=NULL;
    head=&H;

    //创建10个节点的单链表
    p=head;
    for (i=0;i<10;i++) {
        q=(struct NODE *)malloc(sizeof(struct NODE));
        if (NULL==q) return 1;
        q->data=rand()%100;//填写0..99的随机值
        q->next=NULL;
        p->next=q;
        p=q;
    }

    //输出整个单链表
    s=head->next;
    while (1) {
        if (NULL==s) {
            printf("\n");
            break;
        }
        printf("%02d->",s->data);
        s=s->next;
    }

    //将值为5的结点插入到单链表的第k个结点前
    k=3;
    n=0;
    p=head;
    while (1) {
        if (NULL==p) {
            break;
        }
        n++;
        if (k==n) {
            q=(struct NODE *)malloc(sizeof(struct NODE));
            if (NULL==q) return 1;
            q->data=5;
            q->next=p->next;
            p->next=q;
            break;
        }
        p=p->next;
    }