请帮忙看一下这段C代码有什么问题(原题是编写实现将两个已知的有序链表合并成一个有序链表的函数)
#include <stdlib.h>
struct intNode
{
int k;
intNode *next;
} a[1000],b[1000],c[1000];
int n,m;
intNode *p;
void combine(intNode *a,intNode *b)
{
while (a->next!=NULL || b->next!=NULL)
{
if ((a->k<b->k || b->next==NULL) && a->next!=NULL )
{
c[m].k=a->k;
a=a->next;
}
else
{
c[m].k=b->k;
b=b->next;
}
c[m-1].next=&c[m];
c[m].next=NULL;
m++;
}
}
int main()
{
int i;
for (i=0;i<5;i++)
{
a[i].k=i*2+1;
b[i].k=i*2;
a[i].next=&a[i+1];
b[i].next=&b[i+1];
}
m=0;
p=&a[0];
printf("数组a为:");
while (p!=NULL)
{
printf("%d ",p->k);
p=p->next;
}
p=&b[0];
printf("\n");
printf("数组b为:");
while (p!=NULL)
{
printf("%d ",p->k);
p=p->next;
}
printf("\n");
combine(a,b);
p=&c[0];
printf("合并后的数组为:");
while(p!=NULL)
{
printf("%d ",p->k);
p=p->next;
}
printf("\n");
system("pause");
return 0;
}
总是输出a是1,3,5,7,9,0,b是0,2,4,6,8,0,为什么最后会凭空多一个0? 展开
#include <stdio.h>
#include <stdlib.h>
struct intNode
{
int k;
intNode *next;
} a[1000],b[1000],c[1000];
int n,m = 1;
intNode *p;
void combine(intNode *a,intNode *b)
{
while (a!=NULL && b!=NULL)
{
if (a->k<b->k)
{
c[m].k=a->k;
a=a->next;
}
else
{
c[m].k=b->k;
b=b->next;
}
c[m-1].next=&c[m];
c[m].next=NULL;
m++;
}
if (a != NULL)
{
c[m].k=a->k;
a=a->next;
c[m-1].next=&c[m];
c[m].next=NULL;
m++;
}
if (b != NULL)
{
c[m].k=b->k;
b=b->next;
c[m-1].next=&c[m];
c[m].next=NULL;
m++;
}
}
int main()
{
int i;
for (i=0;i<5;i++)
{
a[i].k=i*2+1;
b[i].k=i*2;
a[i].next=&a[i+1];
b[i].next=&b[i+1];
}
a[4].next = NULL;
b[4].next = NULL;
m=0;
p=&a[0];
printf("数组a为:");
while (p!=NULL)
{
printf("%d ",p->k);
p=p->next;
}
p=&b[0];
printf("\n");
printf("数组b为:");
while (p!=NULL)
{
printf("%d ",p->k);
p=p->next;
}
printf("\n");
combine(a,b);
p=&c[0];
printf("合并后的数组为:");
while(p!=NULL)
{
printf("%d ",p->k);
p=p->next;
}
printf("\n");
system("pause");
return 0;
}