动态存储创建链表只能用malloc创建节点吗?


#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;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^