单链表创建打印函数,用完creat再用get(打印函数)

#include
#include
#include
using namespace std;

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

void creat(LNode* L){
List p ;
int n;
p= (List)malloc(sizeof(LNode));
L = p;
printf("请输入1(添加)或0(不添加):\n");
cin >> n;
while (n)
{
p = (List)malloc(sizeof(LNode));
printf("请输入节点数据:\n");
cin >> p->data;
p->next = p;
printf("请输入1(添加)或0(不添加):\n");
cin >> n;
}

}
void get(LNode* L){
List p = L;
if (p == NULL)exit(0);
while (p->next != NULL)
{
printf("节点数据:%d\n", p->next->data);
p = p->next;
}
}

void main(){
LNode L;
creat(&L);
get (&L);
}

怎么才能改变LNode的L变量,指针不懂,为什么他没有改变啊

才能改变LNode的L变量,你是想改变 L 的成员的值,还是改变 L 的地址呢?
如果是前者,你的代码没有问题,肯定是可以改变的;如果是后者,怎么可能是后者!后者是一个变量,又不是指针,定义后的地址是不能改变的。
想要改,就必须使用指针。如定义:LNode L = (List)malloc(sizeof(LNode)); 再按 creat(&L); 来调用就可以改变 L 的地址 。

别的不多说,要想改变地址,需要传入指针的指针,看下面的代码
#include
#include

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

void creat(LNode **L){
List head = NULL,p = NULL ,temp = NULL;
int n;
//p= (List)malloc(sizeof(LNode));
//*L = p;
printf("请输入1(添加)或0(不添加):\n");
scanf("%d",&n);

while (n)
{
    temp = (List)malloc(sizeof(LNode));
    if( temp == NULL ) return ;

    printf("请输入节点数据:\n");
    scanf("%d", &temp->data);
    temp->next = NULL;

    if( NULL == p )
    {
       p = temp;
       head = p;
       *L = p;
    }else{
       p->next = temp;
       p = p->next;
    }

    printf("请输入1(添加)或0(不添加):\n");
    scanf("%d",&n);

}

}
void get(LNode* L){
List p = L;
if (p == NULL)exit(0);

while (p != NULL)
{
    printf("节点数据:%d\n", p->data);
    p = p->next;
}

}
void main(){
LNode *L;
creat(&L);
get (L);
}