热爱学习的呆萌的文青
2015-12-18 03:16
采纳率: 54.8%
浏览 1.6k
已采纳

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条回答 默认 最新

  • ysuwood 2015-12-18 06:36
    已采纳

    完善了一下,头结点没存数,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");
    }
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • threenewbee 2015-12-18 03:28

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

    评论
    解决 无用
    打赏 举报
  • ysuwood 2015-12-18 05:07

    可以用引用。给你改了一部分,自己再完善吧,还需要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");
    }
    
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题