#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);
}