#include<stdio.h>
#include<malloc.h>
typedef struct StudentType
{
int a,z;
struct StudentType *next,*prior;
}*Linklist,List;
Linklist Build(int n)
{
int i=n;
Linklist head=NULL,p=NULL,ptr=NULL;
head=(Linklist)malloc(sizeof(List));
head->next=NULL;
ptr=head;
for(i=0;i<n;i++)
{
p=(Linklist)malloc(sizeof(List));
printf("指数,系数\n");
scanf("%d%d",&p->z,&p->a);
ptr->next=p;
p->prior=ptr;
ptr=p;
}
head->prior=p;
p->next=head;
return head;
}
Linklist Link(Linklist a,Linklist b)
{
Linklist heada=a->next,headb=b->next,temp=NULL;
Linklist head=a,ptr=head;
while(heada->next!=a->next && headb->next!=b->next)
{
if(heada->z==headb->z)
{
heada->a+=headb->a;
ptr->next=heada;
heada->prior=ptr;
ptr=heada;
heada=heada->next;
headb=headb->next;
}
else if(heada->z < headb->z)
{
temp=heada;
while(temp->z!=headb->z && temp->next!=a->next)
{
temp=temp->next;
}
if(temp->next==a->next)
{
while(heada->z < headb->z&&heada->next!=a->next )
{
ptr->next=heada;
heada->prior=ptr;
ptr=heada;
heada=heada->next;
}
ptr->next=headb;
headb->prior=ptr;
ptr=headb;
headb=headb->next;
}
else
{
headb->a+=temp->a;
while(heada!=temp)
{
ptr->next=heada;
heada->prior=ptr;
ptr=heada;
heada=heada->next;
}
ptr->next=headb;
headb->prior=ptr;
ptr=headb;
heada=temp->next;
headb=headb->next;
}
}
else
{
temp=headb;
while(temp->z!=heada->z && temp->next!=b->next)
{
temp=temp->next;
}
if(temp->next==b->next)
{
while(headb->z < heada->z && headb->next!=b->next)
{
ptr->next=headb;
headb->prior=ptr;
ptr=headb;
headb=headb->next;
}
ptr->next=heada;
heada->prior=ptr;
ptr=heada;
heada=heada->next;
}
else
{
heada->a+=temp->a;
while(headb!=temp)
{
ptr->next=headb;
headb->prior=ptr;
ptr=headb;
headb=headb->next;
}
ptr->next=heada;
heada->prior=ptr;
ptr=heada;
heada=heada->next;
headb=temp->next;
}
}
}
if(heada->next!=a->next)
{
while(heada!=a)
{
ptr->next=heada;
heada->prior=ptr;
ptr=heada;
heada=heada->next;
}
}
if(headb->next!=b->next)
{
while(headb!=b)
{
ptr->next=headb;
headb->prior=ptr;
ptr=headb;
headb=headb->next;
}
}
ptr->next=head;
head->prior=ptr;
return head;
}
void Print(Linklist head)
{
Linklist ptr=head->next;
while(ptr->next!=head->next)
{
printf("aaaaaaaaaaa指数,系数\n");
printf("%d %d\n",ptr->z,ptr->a);
ptr=ptr->next;
}
}
int main()
{
int a,b;
printf("输入多项式的元素个数\n");
scanf("%d%d",&a,&b);
Linklist heada=Build(a);
Linklist headb=Build(b);
Linklist headTotal=Link(heada,headb);
Print(headTotal);
return 0;
}