用链表实现一元多项式的相加(规定指数从高到低输入)
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
int coef;
int expn;
struct Node *next;
}LNode,*LinkList;// 用结构体存放一元单项式
LinkList Tail()//输入时指数从高到低,以0 0结束
{
LinkList L;
LNode *r,*s;
int x,n;
L=(LNode*)malloc(sizeof(LNode));
L->next=NULL;
r=L;
scanf("%d %d",&x,&n);
while(x!=0)
{
s=(LNode*)malloc(sizeof(LNode));
s->coef=x;
s->expn=n;
r->next=s;
r=s;
scanf("%d %d",&x,&n);
}
r->next=NULL;
return L;
}
LinkList Add(LinkList a,LinkList b)
{
LinkList c;//定义另一个链表存放结果
LNode *r,*s;
a=a->next;
b=b->next;
c=(LNode*)malloc(sizeof(LNode));
r=c;
while(a!=NULL&&b!=NULL)
{//遍历,分三类
if(a->expn>b->expn)
{
s=(LNode*)malloc(sizeof(LNode));
s->coef=a->coef;
s->expn=a->expn;
r->next=s;
r=s;
a=a->next;
}
else if(a->expn<b->expn)
{
s=(LNode*)malloc(sizeof(LNode));
s->coef=b->coef;
s->expn=b->expn;
r->next=s;
r=s;
b=b->next;
}
else if(a->expn==b->expn)
{
s=(LNode*)malloc(sizeof(LNode));
s->coef=a->coef+b->coef;
s->expn=a->expn;
if (s->coef==0)
free(s);
else
{
r->next=s;
r=s;
}
a=a->next;
b=b->next;
}
}
if(a!=NULL)
r->next=a;
else if(b!= NULL)
r->next=b;
else
r->next=NULL;
return c;
}
int main()
{
LinkList La,Lb,Lc;
LNode *p;
La=Tail();
Lb=Tail();
Lc=Add(La,Lb);
if(Lc->next!=NULL)
for(p=Lc->next;p!=NULL;p=p->next)
printf("%d %d ",p->coef,p->expn);
else
printf("0");//单独处理特殊情况
return 0;
}