关于链表的一个有关问题,无法改变值?

关于链表的一个问题,无法改变值??
http://topic.csdn.net/u/20120728/21/1ee56666-32b5-452b-a3c8-981f79048fa0.html?72670

在看到上面的帖子的问题,有了以下的回答后,我自己也跑了下程序 改成这样
C/C++ code

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

typedef struct LNode{
    int data;
    struct LNode *next;
}LNode,*LinkList;

void CreateList(LinkList L, int n)
{
    int i;
    LNode *p;
    p=(LinkList)malloc(sizeof(LNode));
    if(!L) exit(0);
    
    L->next = NULL;

    for(i=n;i>0;i--)
    {
        p=(LNode *)malloc(sizeof(LNode));
        if(!p) exit(0);
        scanf("%d",&p->data);
        p->next = L->next;
        L->next = p;
    }
}

int main()
{    
    LinkList p;
    
    CreateList(p,10);
    
    return 0;
}




结果是在Creat里面 L->NULL;不起作用 尽管执行该语句,但是L->next不改变,为oxffffffff;
而且在p->next = L->next;
  L->next = p; 这里的L->next = p; 执行了也没用,也就是说L->next 是没法改变的??

但是将代码改为
C/C++ code

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

typedef struct LNode{
    int data;
    struct LNode *next;
}LNode,*LinkList;

void CreateList(LinkList L, int n)
{
    int i;
    LNode *p;
   
    if(!L) exit(0);
    
    L->next = NULL;

    for(i=n;i>0;i--)
    {
        p=(LNode *)malloc(sizeof(LNode));
        if(!p) exit(0);
        scanf("%d",&p->data);
        p->next = L->next;
        L->next = p;
    }
}
int main()
{    
    LinkList p;
    
    p=(LinkList)malloc(sizeof(LNode));
    CreateList(p,10);

    return 0;
}



就可以了 也就是将p=(LinkList)malloc(sizeof(LNode));申请头节点的内存放在外面就可以了

这是为什么呢 是因为在main里面 p没有申请就直接使用了么 可是在里面申请不也可以么  

我IDE是codelite,望解答 谢谢

------解决方案--------------------
CreateList(p,10);第一种方法你未申请内存就传入了p,虽然在CreateList(p,10);中申请内存了,但是出了CreateList(p,10);是不会生效的,因为是传的值进去的
------解决方案--------------------
LinkList p;
CreateList(p,10);

p是一个指向无效区域的指针,一般我们会初始化为NULL,
然后CreateList里面的p则是一个拷贝,所以不管函数里面的p怎么变化,外面的p所存储的地址都是不变的,自然也访问不了函数里面p所指向的地址的内容。
可以这样void CreateList(LinkList &L, int n), 或者void CreateList(LinkList *L, int n)

LinkList p;
p=(LinkList)malloc(sizeof(LNode));
CreateList(p,10);
这种之所以可以是因为p是一个有效区域的指针,虽然传进去的是一个p的拷贝,但是外面的p可以通过地址访问到函数里面所创建的内容。