一多项式加法的,创建链表输入的地方不知错在哪里。
#include <stdio.h>#include <malloc.h>
typedef int elemtype ;
typedef struct node {
elemtype co;
elemtype exp;
struct node *next;
}linknode,*linklist;
//创建并添加元素
void creat(linklist l)
{
linklist p,r;
int co,exp;
r=l;
while (scanf("%d%d",&co,&exp)==2&&exp>0)
{
p=(linklist)malloc(sizeof(linklist));
p->co=co;
p->exp=exp;
r->next=p;
r=p;
}
r->next=NULL;
}
//建立空表
void creat1(linklist l)
{
l=(linklist)malloc(sizeof(linklist));
l->next=NULL;
}
linklist add(linklist l1,linklist l2)
{
linklist l3;
creat1(l3);
linklist p=l1,q=l2;
linklist r=l3,k;
while (p!=NULL&&q!=NULL)
{
if (p->exp==q->exp)
{
if(p->co+q->co!=0)
{
p->co+=q->co;
k=(linklist )malloc(sizeof(linklist));
k->co=p->co;
k->exp=p->exp;
r->next=k;
r=k;
}
p=p->next;
q=q->next;
}
if(p->exp>q->exp)
{
k=(linklist)
malloc(sizeof (linklist));
k->co=q->co;
k->exp=q->exp;
r->next=k;
r=k;
q=q->next;
}
if(p->exp<q->exp)
{
k=(linklist)malloc(sizeof(linklist));
k->co=p->co;
k->exp=p->exp;
r->next=k;
r=k;
p=p->next;
}
}
while (p!=NULL)
{
k=(linklist)malloc (sizeof(linklist));
k->co=p->co;
k->exp=p->exp;
r->next=k;
r=k;
p=p->next;
}
while (q!=NULL)
{
k=(linklist)malloc (sizeof(linklist));
k->co=q->co;
k->exp=q->exp;
r->next=k;
r=k;
p=p->next;
}
r->next=NULL;
return l3;
}
void print(linklist l)
{
linklist p=l;
while (p!=NULL)
{
printf ("%d%d",p->co,p->exp);
}
}
int main()
{
int n,i=0;
linklist l1;
linklist l2;
linklist l3;
scanf("%d",&n);
while (i<n)
{
creat1(l1);
creat(l1);
creat1(l2);
creat(l2);
l3=add(l1,l2);
print(l3);
}
return 0;
}