#include<stdio.h>
#include<malloc.h>
typedef int elemtype;
typedef struct LNode
{
elemtype data;
struct Lnode* next;
}LNode,*LinkList;
void InitList(LinkList L)
{
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;
}
void CreatList(LinkList L,int n)
{
LinkList p,r;
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;
r = L;
for (int i = 0; i < n; i++)
{
p=(LinkList)malloc(sizeof(LNode));
printf("请输入链表的元素%d:",i);
scanf_s("%d",&(p->data));
p->next = NULL;
r->next = p;
r =p;
}
}
void merge_L(LinkList LA, LinkList LB, LinkList LC )
{
LinkList pa, pb,pc;
pa = LA->next;
pb = LB->next;
LC = LA;
pc = LC;
while (pa&&pb)
{
if (pa->data <= pc->data)
{
pc->next = pa;
pc = pa;
pa = pa->next;
}
else
{
pc->next = pb;
pc = pb;
pb = pb->next;
}
}
pc->next = pa ? pa : pb;
free(LB);
}
void printfList(LinkList L)
{
for (int i = 0; i < 10; i++)
{
printf(" %d",L->data);
}
}
int main()
{
LinkList L, L1, L2, L3;
L = L1 = L2 = L3 = NULL;
InitList(L);
printf("链表L1的数据为:\n");
CreatList(L1, 4);
printfList(L1);
printf("链表L2的数据为:\n");
CreatList(L2, 6);
printfList(L2);
merge_L(L1, L2, L3);
printf("合并后的有序链表的数据为:\n");
printfList(L3);
return 0;
}
为什么链表二没有输入就结束程序了
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
关注 【以下回答由 GPT 生成】
问题的关键在于
CreatList
函数中对于链表L的初始化的方式不正确。在CreatList
函数中,你尝试给链表L赋值,但是由于L是形参,它的改变并不会影响到实参L1,所以实际上L1并没有被正确初始化。解决这个问题的方法是将
CreatList
函数中的形参L改为指针的指针类型(即LinkList* L
),同时修改调用CreatList
函数的地方。以下是修改后的代码:
#include<stdio.h> #include<malloc.h> typedef int elemtype; typedef struct LNode { elemtype data; struct LNode* next; }LNode, *LinkList; void InitList(LinkList* L) { *L = (LinkList)malloc(sizeof(LNode)); (*L)->next = NULL; } void CreatList(LinkList* L, int n) { LinkList p, r; *L = (LinkList)malloc(sizeof(LNode)); (*L)->next = NULL; r = *L; for (int i = 0; i < n; i++) { p = (LinkList)malloc(sizeof(LNode)); printf("请输入链表的元素%d:", i); scanf_s("%d", &(p->data)); p->next = NULL; r->next = p; r = p; } } void merge_L(LinkList LA, LinkList LB, LinkList LC) { LinkList pa, pb, pc; pa = LA->next; pb = LB->next; LC = LA; pc = LC; while (pa&&pb) { if (pa->data <= pc->data) { pc->next = pa; pc = pa; pa = pa->next; } else { pc->next = pb; pc = pb; pb = pb->next; } } pc->next = pa ? pa : pb; free(LB); } void printfList(LinkList L) { LinkList p = L->next; while (p != NULL) { printf(" %d", p->data); p = p->next; } } int main() { LinkList L, L1, L2, L3; L = L1 = L2 = L3 = NULL; InitList(&L1); printf("链表L1的数据为:\n"); CreatList(&L1, 10); printfList(L1); return 0; }
这样修改后,链表L1应该就不会出现没有输入就结束程序的问题了。
【相关推荐】
- 这个问题的回答你可以参考下: https://ask.csdn.net/questions/333519
- 你也可以参考下这篇文章:【数据结构】二叉树的遍历及应用
- 您还可以看一下 张传波老师的软件设计是怎样炼成的?课程中的 架构设计的第二层拆解小节, 巩固相关知识点
- 除此之外, 这篇博客: 快速排序怎么写?中的 第二种解法的交换次数 部分也许能够解决你的问题。
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^解决评论 打赏 举报无用 1
悬赏问题
- ¥66 关于川崎机器人调速问题
- ¥15 winFrom界面无法打开
- ¥15 crossover21 ARM64版本安装软件问题
- ¥15 mymetaobjecthandler没有进入
- ¥15 mmo能不能做客户端怪物
- ¥15 osm下载到arcgis出错
- ¥15 Dell g15 每次打开eiq portal后3分钟内自动退出
- ¥200 使用python编写程序,采用socket方式获取网页实时刷新的数据,能定时print()出来就行。
- ¥15 matlab如何根据图片中的公式绘制e和v的曲线图
- ¥15 我想用Python(Django)+Vue搭建一个用户登录界面,但是在运行npm run serve时报错了如何解决?