为什么这个多项式加法不起作用?

时间:2014-11-04 16:11:26

标签: c linked-list

所以这是在获取两个多项式之后添加的片段。我尝试显示总和的最后一部分是我陷入困境的地方。我不能得到的是为什么不应该使用while循环。有人可以帮忙吗?! PS:函数是我在这里无法使用的东西......由于问题的要求而导致的一些其他限制。 PPS:我也知道你可能认为它是一个非常基本的程序并相信我,当我说我知道它是..但我真的需要帮助刷这些基本技能和任何帮助都将不胜感激

struct poly
{ int e;float c;
  struct poly *next;
};
typedef struct poly node;

r = (node*)malloc(sizeof(node)); //r is a node of structure
p3 = r;
if((p3 == NULL) || (r == NULL)) { printf("insuf mem");return;}

while ( (p1!=NULL) && (p2!=NULL) ) {
if( p1->e == p2->e) {
 r->e = p1->e;
 r->c = (p1->c) + (p2->c);
 p1 = p1->next;
 p2 = p2->next;
 r->next = (node*)malloc(sizeof(node));
 r = r->next;
}
else if ( (p1->e) > (p2->e) ) {
 r->e = p1->e;
 r->c = p1->c;
 p1 = p1->next;
 r->next = (node*)malloc(sizeof(node));
 r = r->next;
}
else {
 r->e = p2->e;
 r->c = p2->c;
 p2 = p2->next;
 r->next = (node*)malloc(sizeof(node));
 r = r->next;
 }
/* if( (p1 == NULL)&&(p2==NULL) )
 r->next=NULL;
 else
 r = r->next;*/
}

while (p1!=NULL)
{
 r->e = p1->e;
 r->c = p1->c;
 p1 = p1->next;
 r->next = (node*)malloc(sizeof(node));
 r = r->next;
 /*if(p1!=NULL)
  r = r->next;
 else r->next=NULL;*/
}

while (p2!=NULL)
{
 r->e = p2->e;
 r->c = p2->c;
 p2 = p2->next;
 r->next = (node*)malloc(sizeof(node));
 r = r->next;
/* if(p2!=NULL)
  r = r->next;
 else r->next=NULL;*/
}
r=NULL;


printf("\n\nThe sum is\n");
while(p3!=NULL) {
printf("%3.2f X^%d + ",p3->c,p3->e);
p3 = p3->next;
}

getch();
}

1 个答案:

答案 0 :(得分:0)

执行此操作时:

r->next = malloc(sizeof(node));
r = r->next;

问问自己r的内容是什么:

r->e = ?;
r->c = ?;
r->next = ?;  // Important!

答案是r的内容未知/未定义。由于这将是从p3开始的链接列表中的最后一个节点,r->next恰好是NULL,你没有"结束"到你的清单。

要解决此问题,您需要初始化所有新节点的内容,例如:

r->next = malloc(sizeof(node));
r = r->next;

r->next = NULL;  //Initialize new node at end of list
r->c = 0;
r->e = 0;