请帮忙看一下这段C代码有什么问题(原题是编写实现将两个已知的有序链表合并成一个有序链表的函数)

#include<stdio.h>#include<stdlib.h>structintNode{intk;intNode*next;}a[1000],b[1000],c... #include <stdio.h>
#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?
展开
 我来答
丹明扬
2011-12-12
知道答主
回答量:33
采纳率:0%
帮助的人:20万
展开全部

#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;

}

忘至白葬不情必0T
2011-12-11 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:90%
帮助的人:1.2亿
展开全部
因为你给a,b赋值时,最后是让a[4],b[4]的next指向了a[5],b[5],并没有让它们的next为空。
追问
能帮忙修改一下吗?我是菜鸟,不好意思哈!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式