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

2024-12-16 14:09:54
推荐回答(2个)
回答1:

#include 

#include 

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->kk)  

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;

}

回答2:

因为你给a,b赋值时,最后是让a[4],b[4]的next指向了a[5],b[5],并没有让它们的next为空。