#include<stdio.h>
#include <malloc.h>
typedef struct LNode{
int value;
struct LNode* next;
}LNode,*LinkList;
int main(){
LNode l;
LinkList L;
L=&l;
L->next=NULL;
int m=0;
printf("请输入你要插入结点的值m:");
scanf("%d",&m);
while(m!=888){
LNode s;
LinkList p;
p=&s;
// p=(LinkList)malloc(sizeof(LNode));
p->value=m;
p->next=L->next;
L->next=p;
**printf("%d\n",p);
printf("%d\n",p->value); **
scanf("%d",&m);
}
printf("%d\n",L->next);
printf("结点输入完成。\n");
printf("各节点的值为:\n");
while(L->next!=NULL){
printf("%d\t",L->next->value);
L=L->next;
}
}
**printf("%d\n",p);
printf("%d\n",p->value); **
为什么这里面 每次循环创建的结点输出的地址都是一样的
但是用malloc创建的地址都是不同的
c语言只能用malloc,c++还可以用new
看While循环里边
while{
1、node节点,s
2、指针,p
3、添加内容
4、修改L指针的指向
}
不管循环多少次,L指针后面只有一个节点
而且while循环每次都是LNode s,等于只创建过一个LNode节点s
代码逻辑是有问题的,有了头节点后使用while循环创建新的节点
每次循环应该用new或者malloc申请节点,向节点内增加内容信息,修改“前一个指针”的next指向该新建的节点
LinkList head = L; //头结点
while (m != 888)
{
LinkList s = new LNode(); //创建新结点
s->value = m; //赋值
s->next = NULL; //修改next指向为NULL
head->next = s;
head = head->next;
}
不知道你这个问题是否已经解决, 如果还没有解决的话: