有可能是因为创建链表部分不对,希望大师支招
以下是代码:
#include <stdio.h>
#include <stdlib.h>
struct Node
{
int info;
struct Node *next;
};
typedef struct Node *PNode;//定义结点类型指针
struct Linklist
{
PNode head;
};
typedef struct Linklist Linklist,*PLinklist;//定义链表结构及其指针
PLinklist createNullList(int n)//创建一个新的链表
{
int i;
PLinklist pllist;
PNode p,q;
pllist=(PLinklist)malloc(sizeof(PLinklist));
p=pllist->head;
p->next=NULL;
for(i=0;i<n;i++)
{
q=(PNode)malloc(sizeof(PNode));//用于指向下一个位置
q=p->next;
scanf("%d",&q->info);//给链表赋值
p=q;
}
p->next=NULL;//输入完毕
free(q);//释放
return pllist;
}
void merge(PNode pa,PNode pb,PLinklist lc)//排序
{
PNode pc;
lc->head=pc=pa;
pa=pa->next;
pb=pb->next;
while(pa&&pb)
{
if(pa->info<=pb->info)
{
pc->next=pa;
pc=pa;
pa=pa->next;
}
else
{
pc->next=pb;
pc=pb;
pa=pb->next;
}
}
pc->next=pa?pa:pb;//较长链表的剩余部分直接接入
}
int main()//主函数部分
{
int n,m;
PLinklist la,lb,lc;//用于排序的两个链表la,lb,用于合并的链表lc
PNode pa,pb;
scanf("%d\n",&n);
la=createNullList(n);
pa=la->head;
scanf("%d\n",&m);
lb=createNullList(m);
pb=lb->head;
merge(pa,pb,lc);
PNode temp;//用于输出的结点
for(temp=lc->head;temp;temp=temp->next)
{
printf("%d\n",temp->info);
}
free(temp); //释放
return 0;
}
在DEV C++上无法输入第二个数组,
在codeblocks上error:Aborted(program collect2)
用链表实现两个有序数组的输入和排序
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- stone_wangzx 2022-03-28 10:55关注
添加************************************的地方是我修改的
#include <stdio.h> #include <stdlib.h> struct Node { int info; struct Node* next; }; typedef struct Node* PNode;//定义结点类型指针 struct Linklist { PNode head; }; typedef struct Linklist Linklist, * PLinklist;//定义链表结构及其指针 PLinklist createNullList(int n)//创建一个新的链表 { if (n < 1){ return nullptr; } int i; PLinklist pllist; PNode p = nullptr, q = nullptr;//初始化一下p和q的值************************************ pllist = (PLinklist)malloc(sizeof(PLinklist)); pllist->head = (PNode)malloc(sizeof(PNode));//申请header************************************ p = pllist->head; p->next = NULL; for (i = 0; i < n; i++) { q = (PNode)malloc(sizeof(PNode));//用于指向下一个位置 p->next = q;//赋值方向反了************************************ scanf("%d", &q->info);//给链表赋值 p = q; } p->next = NULL;//输入完毕 //free(q);//这里没有必要释放,因为你申请的内存都已经存储到链表中了************************************ return pllist; } void merge(PNode pa, PNode pb, PLinklist lc)//排序 { PNode pc; lc->head = pc = pa; pa = pa->next; pb = pb->next; while (pa && pb) { if (pa->info <= pb->info) { pc->next = pa; pc = pa; pa = pa->next; } else { pc->next = pb; pc = pb; pa = pb->next; } } pc->next = pa ? pa : pb;//较长链表的剩余部分直接接入 } int main()//主函数部分 { int n, m; PLinklist la, lb, lc;//用于排序的两个链表la,lb,用于合并的链表lc lc = (PLinklist)malloc(sizeof(PLinklist));//构建lc ************************************ lc->head = nullptr;//************************************ PNode pa, pb; scanf("%d\n", &n); la = createNullList(n); pa = la->head; scanf("%d\n", &m); lb = createNullList(m); pb = lb->head; merge(pa, pb, lc); PNode temp;//用于输出的结点 for (temp = lc->head; temp; temp = temp->next) { printf("%d\n", temp->info); } //free(temp); //释放,这里不用释放,因为不是你申请的,否则lc就会被破坏了************************************ //需要释放一下lc的内存************************************ return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 如何解决蓝牙通话音频突发失真问题
- ¥15 安装opengauss数据库报错
- ¥15 【急】在线问答CNC雕刻机的电子电路与编程
- ¥60 在mc68335芯片上移植ucos ii 的成功工程文件
- ¥15 笔记本外接显示器正常,但是笔记本屏幕黑屏
- ¥15 Python pandas
- ¥15 蓝牙硬件,可以用哪几种方法控制手机点击和滑动
- ¥15 生物医学数据分析。基础课程就v经常唱课程舅成牛逼
- ¥15 云环境云开发云函数对接微信商户中的分账功能
- ¥15 空间转录组CRAD遇到问题