曹嗲嗲今天敲代码了嘛 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日

悬赏问题

  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题
  • ¥15 Python时间序列如何拟合疏系数模型
  • ¥15 求学软件的前人们指明方向🥺
  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
  • ¥20 双层网络上信息-疾病传播