关于#C链表无头结点#的初始化问题,如何解决?


#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <stdbool.h>

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

void InitList(LinkList L)
{
    L = NULL;
    printf("%p\n", L);
}

int main()
{
    LinkList L;
    InitList(&L);
    printf("%p\n", &L);
    int x = 0;
    scanf("%d", &x);
    while(x != 9999) 
    {
        //入栈
        scanf("%d", &x);
    }
    return 0;
}

int main()
{
    LinkList L = NULL, p, q; //

    InitList(&L);
    printf("%p\n", L);
    int x = 0;
    scanf("%d", &x);
    while (x != 9999)
    {
        //入栈
        p = (LinkList)malloc(sizeof(Node));
        p->data = x;
        p->next = NULL;
        if (L == NULL)
            L = p;
        else
            q->next = p;
        q = p;

        scanf("%d", &x);
    }
    p = L;
    while (p)
    {
        printf("%d ", p->data);
        p = p->next;
    }

    return 0;
}

修改如下,供参考:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>   //修改
#include <string.h>
#include <stdbool.h>

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

void InitList(LinkList* L) //修改
{
    (*L) = NULL;             //修改
    printf("%p\n",(*L));     //修改
}
int main()
{
    LinkList L, p;
    InitList(&L);
    printf("%p\n", L); //("%p\n", &L); 修改
    int x = 0;
    scanf("%d", &x);
    while (x != 9999)
    {
        //入栈
        p = (LinkList)malloc(sizeof(Node)); //修改
        p->next = NULL;
        p->data = x;
        p->next = L;
        L = p;
        scanf("%d", &x);
    }
    p = L;      //修改
    while (p) {
        printf("%d ", p->data);
        p = p->next;
    }
    return 0;
}