朋友帮我改一个简单程序
实现链表的合并基本要求:
(1) 建立两个链表A和B,链表的个数分别为m和n个;
(2) 假设元素分别为(X1,X2,X3,。。。Xm)和(Y1,Y2,Y3。。。
Yn)。把它们合并成一个线形表C使得:当m》n时,C=X1,Y1,X2,
Y2。。。Xn,Yn。。。Xm
当n》m时,C=Y1,X1,Y2,X2。。。Yn,Xn。。。Yn输出线形表。
我快晕死了上次在论坛里面找的一个算法不太对,汗~~~自己不怎么会改搞了一天都没有什么进展,太菜了吧,急寻高手帮我解答感激涕零~~在线等。
#include"stdio.h"
#include"malloc.h"
typedef struct LNode{
int data[];
int length;
struct LNode *next;
}LNode,*List;
struct LNode *MergeList(List a,List b,List c)
{
int m,n,i,j;
m=a->length; n=b->length;
if(m>=n)
{
for(i=1,j=1;i<=n,j<=n;i++,j++)
{
c->data[2*i]=a->data[j];
c->data[2*i-1]=b->data[j];
}
for(i=n+n;i<=m+n;i++)
{ c->data[i]=a->data[i]; }
}
else
{
for(i=1,j=1;i<=m,j<=m;i++,j++)
{
c->data[2*i-1]=b->data[j];
c->data[2*i]=a->data[j];
}
for(i=m+m;i<=n+m;i++)
{ c->data[i]=b->data[i]; }
}
return c;
}
struct LNode *CreatList(List L,int n)
{int i;
List p;
L=(List)malloc(sizeof(LNode));
L->next=NULL;
for(i=n;i>0;i--) {
p=(List)malloc(sizeof(LNode));
scanf("%d",&p->data);
p->next=L->next;
L->next=p;
}return L;
}
void main()
{int x,y,i;
List a,b,c,p;
printf("input the length of a:\n");
scanf("%d",&x);
printf("input the length of b:\n");
scanf("%d",&y);
printf("input a:\n");
for(i=1;i<=x;i++)
scanf("%d",&a->data[i]);
printf("input b:\n");
for(i=1;i<=y;i++)
scanf("%d",&b->data[i]);
a->length=x;b->length=y;
CreatList(a,x);
CreatList(b,y);
MergeList(a,b,c);
for(i=1;i<=x+y;i++)
printf("%d",c->data[i]);
}
这是本人的完整程序,可是老出现指针错误请高手帮我改一改,非常感谢~~