c语言单向链表的问题???
 #include<stdio.h>
#include<stdlib.h>
struct node{
    int num;
    struct node *next;
};

//构建空的链表
struct node* InitList(struct node *L){
    L = (struct node*)malloc(sizeof(struct node));
    L = NULL;
    printf_s("InitList sucess!");
    return L;
}
//创建单链表
struct node* CreateList(struct node *L,int n){
    struct node *temp,*p;
    L = (struct node*)malloc(sizeof(struct node));
    L->next = NULL;
    temp=L;
    for (int i = 0; i < n; i++){
        p = (struct node*)malloc(sizeof(struct node));
        scanf_s("%d", &p->num);
        temp->next = p;
        temp = p;
    }
    temp->next = NULL;
    return L;
}
void PrintList(struct node *L){
    struct node *temp = L;
    while (temp != NULL){
        printf_s("%d", temp->num);
        temp = temp->next;
    }
}
void PrintMenu(){
    printf_s("------Menu------\n");
    printf_s("0  InitList\n");
    printf_s("1  CreateList\n");
    printf_s("2  PrintList\n");
}
void main(){
    int n,c;
    struct node *La;
    PrintMenu();
    printf_s("Enter the command: ");
    scanf_s("%d", &c);
    switch (c){
    case 0:
        La = InitList(La);
        break;
    case 1:
        printf_s("Enter the number of LinkList: ");
        scanf_s("%d", &n);
        La = CreateList(La, n);
        break;
    case 2:
        PrintList(La);
        break;
    default:
        printf_s("ERROR,Enter again: ");
        break;
    }
    system("pause");
}

为什么主函数case 0 的La = InitList(La); 这句报错: error C4700: uninitialized local variable 'La' used。 ????

3个回答

完善了一下,头结点没存数,print时要从第二个开始:

 #include<stdio.h>
#include<stdlib.h>
struct node{
    int num;
    struct node *next;
};

//构建空的链表
void InitList(struct node *&L){//修改
    L = (struct node*)malloc(sizeof(struct node));
    L->next = NULL;
    L->num=0;
    printf_s("InitList sucess!");
}
//创建单链表
void CreateList(struct node *&L,int n){//修改
    struct node *temp,*p;
    L = (struct node*)malloc(sizeof(struct node));
    L->next = NULL;
    L->num=0;
    temp=L;
    for (int i = 0; i < n; i++){
        p = (struct node*)malloc(sizeof(struct node));
        scanf_s("%d", &p->num);
        temp->next = p;
        temp = p;
    }
    temp->next = NULL;
}
void PrintList(struct node *L){
    struct node *temp = L->next;//修改,头结点不使用
    while (temp != NULL){
        printf("%d", temp->num);
        temp = temp->next;
    }
}
void PrintMenu(){
    printf_s("------Menu------\n");
    printf_s("0  InitList\n");
    printf_s("1  CreateList\n");
    printf_s("2  PrintList\n");
}
void main(){
    int n,c;
    struct node *La;
    c=1;
    while(c>=0)
    {
        PrintMenu();
        printf_s("Enter the command: ");
        scanf_s("%d", &c);
        switch (c){
        case 0:
            InitList(La);
            break;
        case 1:
            printf_s("Enter the number of LinkList: ");
            scanf_s("%d", &n);
            CreateList(La, n);
            break;
        case 2:
            PrintList(La);
            break;
        default:
            printf_s("ERROR,Enter again: ");
            break;
        }
    }

    struct node *te;//增加释放空间
    if(La)
    {
        te=La->next;
        free(La);
        La=te;
    }
    system("pause");
}
xq734536013
热爱学习的呆萌的文青 运行出现错误,指向void InitList(struct node *&L)
4 年多之前 回复
qq_27183003
ysuwood La是指针,指向了头结点。
4 年多之前 回复
xq734536013
热爱学习的呆萌的文青 不太清楚La是头指针还是头结点?
4 年多之前 回复

struct node *La;
->
struct node *La = (node *)malloc(sizeof(node));

xq734536013
热爱学习的呆萌的文青 la 这个头指针也是需要动态分配的吗?
4 年多之前 回复

可以用引用。给你改了一部分,自己再完善吧,还需要free

 #include<stdio.h>
#include<stdlib.h>
struct node{
    int num;
    struct node *next;
};

//构建空的链表
void InitList(struct node *&L){//修改
    L = (struct node*)malloc(sizeof(struct node));
    L = NULL;
    printf_s("InitList sucess!");
}
//创建单链表
void CreateList(struct node *&L,int n){//修改
    struct node *temp,*p;
    L = (struct node*)malloc(sizeof(struct node));
    L->next = NULL;
    temp=L;
    for (int i = 0; i < n; i++){
        p = (struct node*)malloc(sizeof(struct node));
        scanf_s("%d", &p->num);
        temp->next = p;
        temp = p;
    }
    temp->next = NULL;
}
void PrintList(struct node *L){
    struct node *temp = L;
    while (temp != NULL){
        printf_s("%d", temp->num);
        temp = temp->next;
    }
}
void PrintMenu(){
    printf_s("------Menu------\n");
    printf_s("0  InitList\n");
    printf_s("1  CreateList\n");
    printf_s("2  PrintList\n");
}
void main(){
    int n,c;
    struct node *La;
    c=1;
    while(c>=0)
    {
        PrintMenu();
        printf_s("Enter the command: ");
        scanf_s("%d", &c);
        switch (c){
        case 0:
            InitList(La);//修改
            break;
        case 1:
            printf_s("Enter the number of LinkList: ");
            scanf_s("%d", &n);
            CreateList(La, n);//修改
            break;
        case 2:
            PrintList(La);
            break;
        default:
            printf_s("ERROR,Enter again: ");
            break;
        }
    }
    system("pause");
}
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问