多项式合并出错
#include "stdio.h"#include "malloc.h"
typedef struct node{
int xishu;
int zhishu;
struct node *next;
struct node *prior;
}NODE;
NODE *create_list()
{
int a,m,n;
NODE *head,*p,*q;
head=(NODE *)malloc(sizeof(NODE));
q=head;
q->prior=NULL;
printf("请输入链表的长度:");
scanf("%d",&a);
if(a>0)
{
while(a>0)
{
printf("请输入多项式的系数和指数:");
scanf("%d%d",&m,&n);
p=(NODE *)malloc(sizeof(NODE));
p->xishu=m;
p->zhishu=n;
q->next=p;
p->prior=q;
q=p;
a--;
}
q->next=NULL;
}
return head;
}
void show_list(NODE *head)
{
NODE *p;
p=head->next;
while(p!=NULL)
{
printf("%dx^%d ",p->xishu,p->zhishu);
p=p->next;
}
printf("\n");
}
NODE *connect(NODE *head1,NODE *head2)
{
NODE *p,*q;
p=head1->next;
q=head2->next;
while(p->next!=NULL)
{
p=p->next;
}
p->next=q;
q->prior=p;
return head1;
}
NODE *add(NODE *head)
{
int x=0;
NODE *p,*q;
p=head->next;//将p指向第一个节点
q=p->next;//将q指向第二个节点
while(q!=NULL)
{
while(q!=NULL)
{
if(p->zhishu==q->zhishu) //判断p和q的指数是否相等
{
x=p->xishu+q->xishu; //如果相等就相加
if(x!=0) //判断相加后的结果是否为零
{
if(p->next!=q) //q不是p的直接后继时释放q
{
p->xishu=x;
(q->next)->prior=q->prior; //释放掉节点q
(q->prior)->next=q->next;
free(q);
}
else //q是p的直接后继释放q
{
p->xishu=x;
(q->next)->prior=p;
p->next=q->next;
free(q);
}
}
else //如果相加后的结果等于零就同时释放p和q的节点
{
if(p->next!=q)//q不是p的直接后继释放q和p
{
(p->next)->prior=p->prior;
(p->prior)->next=p->next;
(q->next)->prior=q->prior;
(q->prior)->next=q->next;
free(p);
free(q);
}
else//q是p的直接后继时释放p和q
{
(q->next)->prior=p->prior;
(p->prior)->next=q->next;
free(p);
free(q);
}
}
}
else
q=q->next;
}
p=p->next;
q=p->next;
}
return head;
}
main()
{
NODE *a,*b,*c,*d;
a=create_list();
b=create_list();
c=connect(a,b);
show_list(c);
d=add(c);
show_list(d);
getchar();
}
这是我做的多项式的合并。我把两个多项式分别放在两个双向链表里。然后将两个链表合并,再合并新链表的系数相同的项
但不知道出什么问题总是出不来。提示是那个add函数出错了!各位高手帮帮忙啊!
如果各位有好的思路麻烦不吝赐教一下,最好附源码。只要相加的即可!
[ 本帖最后由 小J 于 2009-11-8 19:48 编辑 ]