数据结构,求大神,哪错了(合并La,Lb)
发布网友
发布时间:2022-04-25 20:23
我来回答
共1个回答
热心网友
时间:2022-06-17 03:24
下面的代码是在你的代码上面改的,你写的代码实在太冗余了,创建链表一个函数不就可以了,你写了两个,这部分没修改啊,你自己再想想。另外合并链表的函数是做了一下修改,满足你的要求(1),你看看。
#include"stdio.h"
#include"malloc.h"
#define ERROR -1
#define OK 1
//#define NULL 0 //NULL值已有,可以不用定义
typedef int Status;
typedef struct structLNode{ //少struct
int data;
struct structLNode *next;//定义错误
} LNode, *LinkList;
LinkList La;LinkList Lb;
LNode *creat_La()
{
LNode *head,*p;
La=head=(LNode*)malloc(sizeof(LNode));//带头指针
int n,i; //i提前定义
printf("请输入将要输入La的元素个数n: \n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
p=(LNode*)malloc(sizeof(LNode));
printf("请输入链表的第%d个数: ",i+1);
scanf("%d",&(p->data));
La->next=p;
La=p;
}
La->next=NULL;
return head;
}
/* creat_L */
LNode *creat_Lb(){
LNode *head,*p;
Lb=head=(LNode*)malloc(sizeof(LNode));//带头指针
int n,i;
printf("请输入将要输入Lb的元素个数n: \n");
scanf("%d",&n);
for(i =0;i<n;i++)
{
p=(LNode*)malloc(sizeof(LNode));
printf("请输入链表的第%d个数: ",i+1);
scanf("%d",&p->data);
Lb->next=p;
Lb=p;
}
Lb->next=NULL;
return head;
}
/* creat_L */
void Mergelist_L(LinkList La,LinkList Lb,LinkList *Lc)//少空格 ,Lc定义修改
{
LinkList pa, pb, pc,p;
*Lc=La;//初始化Lc,另起一个链表
pc=*Lc;
pa=La->next;pb=Lb->next;
while(pa&&pb)
{
if((pa->data) < (pb->data)) //去除等号
{
pc->next = pa;
pa = pa->next;
pc=pc->next;
}
else if((pa->data) > (pb->data))
{
pc->next = pb;
pb = pb->next;
pc=pc->next;
}
else
{
pc->next = pa;
pa = pa->next;
pc=pc->next;
p=pb;
pb = pb->next;
free(p);
}
}
pc->next = pa?pa:pb;
free(La);
free(Lb);
}
/* 输出单链表中的数据元素*/
void out_L(LNode*L)
{
LNode*p=L->next;
printf("线性链表为:");
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next ;
}
printf("\n");
} /* out_link */
int main()
{
LNode *L;
LNode *La,*Lb,*Lc; // 定义为 LNode 类型
La=creat_La(); //返回值
Lb=creat_Lb();
out_L(La);
out_L(Lb);
Mergelist_L(La,Lb,&Lc);
out_L(Lc);
getch();
return 0;
}
满足你的要求希望采纳啊!呵呵。