曹嗲嗲今天敲代码了嘛 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 如何构建全国统一的物流管理平台?
  • ¥100 ijkplayer使用AndroidStudio/CMake编译,如何支持 rtsp 直播流?
  • ¥20 和学习数据的传参方式,选择正确的传参方式有关
  • ¥15 这是网络安全里面的poem code
  • ¥15 用js遍历数据并对非空元素添加css样式
  • ¥15 使用autodl云训练,希望有直接运行的代码(关键词-数据集)
  • ¥50 python写segy数据出错
  • ¥20 关于线性结构的问题:希望能从头到尾完整地帮我改一下,困扰我很久了
  • ¥30 3D多模态医疗数据集-视觉问答
  • ¥20 设计一个二极管稳压值检测电路