曹嗲嗲今天敲代码了嘛 2021-11-15 00:18 采纳率: 66.7%
浏览 29
已结题

有序表的合并 不知道为什么Xcode总是不输出结果

main.c
// 295有序表的合并去重
//
// Created by 曹一典 on 2021/11/12.
//

#include <stdio.h>
#include <stdlib.h>

typedef struct Node{
int data;
struct Node *pNext;
}NODE,*PNODE;

PNODE Ini(void){
PNODE pHead;
pHead=(PNODE)malloc(sizeof(NODE));
pHead->pNext=NULL;
return pHead;
}

void Create(PNODE pHead,int n){
PNODE p=pHead;
for(int i=0;i<n;i++){
PNODE pNew=(PNODE)malloc(sizeof(NODE));
scanf("%d",&pNew->data);
pNew->pNext=NULL;
p->pNext=pNew;
p=p->pNext;
}
}

void Merge(PNODE L1,PNODE L2,PNODE L3){
PNODE a,b,c;
a=L1->pNext;
b=L2->pNext;
c=L3=L1;
while(a&&b){
if(a->datadata){
c->pNext=a;
c=a;
a=a->pNext;
//c=c->pNext;
}
else if(a->data>b->data){
c->pNext=b;
c=b;
b=b->pNext;
//c=c->pNext;
}
else{
/* c->pNext=b;*/
c->pNext=a;
c=a;
a=a->pNext;
b=b->pNext;
//c=c->pNext;
// c=c->pNext;
}
c->pNext=a?a:b;
L1->pNext=NULL;
L2->pNext=NULL;
//free (L2);

}

}

void output(PNODE m){
PNODE n=m->pNext;
while(n){
printf("%d",n->data);
n=n->pNext;
}
}

int main(int argc, const char * argv[]) {
int a,b;
scanf("%d %d",&a,&b);
PNODE p1=Ini();
PNODE p2=Ini();
PNODE p3=Ini();
Create(p1, a);
Create(p2, b);
Merge(p1,p2,p3);
//output(p1);
//output(p2);
output(p3);

return 0;

}

  • 写回答

1条回答 默认 最新

  • CSDN专家-link 2021-11-15 05:40
    关注

    c=L3=L1就错了
    L3本身传入进来时已经分配空间了,你在这里又重新指向L1,后面所有代码只是对L1链表进行修改,外部传入的p3指向的链表还是空的。
    指针作为参数时,只能修改指针指向的空间内,不能修改指针自身的地址,所以L3=L1对于p3来说是沒有作用的。
    要么p3不要分配空间,并且参数改为指针的指针,或者将L3作为返回值,不是参数;要么合并函数将节点都写入新的L3,不要指向L1

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

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

悬赏问题

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