#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);
}
为什么创建的单链表输出不了?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- 技术专家团-小桥流水 2022-11-22 16:02关注
初始化函数里,L = (LinkList)malloc(sizeof(LinkList)); 应该是 L = (LinkList)malloc(sizeof(Node));
printf("输入数据")这一句可以拿到while循环外面,或者你再c= getchar()后面在加一句getchar() 用来吸收每次输入的回车符。
改法一:
把printf("输入数据")放到while循环外面,运行结果如下:代码:
#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();
运行效果:代码:
#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); }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 c程序不知道为什么得不到结果
- ¥40 复杂的限制性的商函数处理
- ¥15 程序不包含适用于入口点的静态Main方法
- ¥15 素材场景中光线烘焙后灯光失效
- ¥15 请教一下各位,为什么我这个没有实现模拟点击
- ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
- ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
- ¥20 有关区间dp的问题求解
- ¥15 多电路系统共用电源的串扰问题
- ¥15 slam rangenet++配置