风und桥 2022-11-22 15:36 采纳率: 86.4%
浏览 20
已结题

为什么创建的单链表输出不了?

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
typedef struct Node {
    char data;
    struct Node* next;
}Node, * LinkList;
//初始化
InitList(LinkList L)
{
    L = (LinkList)malloc(sizeof(LinkList));
    L->next = NULL;
    return L;
}
//头插
void CreateFromHead(LinkList L)
{
    Node* s;
    char c;
    int flag = 1;
    while (flag)
    {
        printf("输入数据");
        c = getchar();
        if (c != '$')
        {
            s = (Node*)malloc(sizeof(Node*));
            s->data = c;
            s->next = L->next;
            L->next = s;
        }
        else flag = 0;
    }
}

//输出
void Printlist(LinkList L)
{
    printf("该单链表的内容为:");
    L = L->next;
    while (L != NULL)
    {
        printf("%s", L->data);
        L = L->next;
    }

}

int main()
{
    LinkList L = NULL;
    L = InitList(L);
    CreateFromHead(L);
    Printlist(L);
}


  • 写回答

4条回答 默认 最新

  • 关注

    初始化函数里,L = (LinkList)malloc(sizeof(LinkList)); 应该是 L = (LinkList)malloc(sizeof(Node));
    printf("输入数据")这一句可以拿到while循环外面,或者你再c= getchar()后面在加一句getchar() 用来吸收每次输入的回车符。
    改法一:
    把printf("输入数据")放到while循环外面,运行结果如下:

    img

    代码:

    #define _CRT_SECURE_NO_WARNINGS 1
    
    
    #include <stdio.h>
    #include <stdlib.h>
    typedef struct Node {
        char data;
        struct Node* next;
    }Node, * LinkList;
    //初始化
    LinkList InitList(LinkList L)
    {
        L = (LinkList)malloc(sizeof(Node));
        L->next = NULL;
        return L;
    }
    //头插
    void CreateFromHead(LinkList L)
    {
        Node* s;
        char c;
        int flag = 1;
        printf("输入数据");
        while (flag)
        {
            //printf("输入数据");  //拿到外面
            c = getchar();
            if (c != '$')
            {
                s = (Node*)malloc(sizeof(Node*));
                s->data = c;
                s->next = L->next;
                L->next = s;
            }
            else flag = 0;
        }
    }
    //输出
    void Printlist(LinkList L)
    {
        printf("该单链表的内容为:");
        L = L->next;
        while (L != NULL)
        {
            printf("%c", L->data);
            L = L->next;
        }
    }
    int main()
    {
        LinkList L = NULL;
        L = InitList(L);
        CreateFromHead(L);
        Printlist(L);
    }
    
    
    

    改法二:
    不改变printf("输入数据")的位置,在c = getchar();后面再加一句getchar();
    运行效果:

    img

    代码:

    #define _CRT_SECURE_NO_WARNINGS 1
    
    
    #include <stdio.h>
    #include <stdlib.h>
    typedef struct Node {
        char data;
        struct Node* next;
    }Node, * LinkList;
    //初始化
    LinkList InitList(LinkList L)
    {
        L = (LinkList)malloc(sizeof(Node));
        L->next = NULL;
        return L;
    }
    //头插
    void CreateFromHead(LinkList L)
    {
        Node* s;
        char c;
        int flag = 1;
        
        while (flag)
        {
            printf("输入数据");  
            c = getchar();
            getchar(); //吸收每次输入的回车符
            if (c != '$')
            {
                s = (Node*)malloc(sizeof(Node*));
                s->data = c;
                s->next = L->next;
                L->next = s;
            }
            else flag = 0;
        }
    }
    //输出
    void Printlist(LinkList L)
    {
        printf("该单链表的内容为:");
        L = L->next;
        while (L != NULL)
        {
            printf("%c", L->data);
            L = L->next;
        }
    }
    int main()
    {
        LinkList L = NULL;
        L = InitList(L);
        CreateFromHead(L);
        Printlist(L);
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 11月30日
  • 已采纳回答 11月22日
  • 创建了问题 11月22日

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置