输入:
输出
#include <iostream>
using namespace std;
struct element{
int zs;//指数
int xs;//系数
element * next;
};
element * init(){
element * head=new element;
head->next=NULL;
return head;
}
element * create(element * head,int n){
element *pre=head;
element *p;
int zhishu;
int xishu;
for(int i=0;i<n;i++){
cin>>zhishu>>xishu;
p=new element;
p->zs=zhishu;
p->xs=xishu;
pre->next=p;
pre=p;
}
p->next=NULL;
return head;
}
void printlink(element * head){
if(head->next==NULL) return;
element *p=head->next;
while(p){
if(p->xs != 0) //如果系数不为0
{
if( head->next != p && p->xs > 0)
cout<<"+";
if(p->zs != 0)//如果指数不为0
cout<<p->xs<<"*x^"<<p->zs;
else//如果指数为0
cout<<p->xs;
}
p=p->next;
}
cout<<endl;
}
int main(){
//两个多项式定义两个头指针
element * head1=init();
element * head2=init();
int n1,n2;
cin>>n1;
head1=create(head1,n1);
cin>>n2;
head2=create(head2,n2);
cout<<"第一个多项式是:";
printlink(head1);
cout<<"第二个多项式是:";
printlink(head2);
element * p1=head1->next;
element * pre=head1;
element * p2=head2->next;
while(p1!=NULL||p2!=NULL){
if (p1 == NULL) {
pre->next = p2;
break;
}
else if (p2 == NULL) {
break;
}
// cout<<p1->zs<<' '<<p2->zs;
if(p1->zs==p2->zs) //指数相同,系数相加
{
p1->xs=p1->xs+p2->xs;
pre=p1;
p1=p1->next;
p2=p2->next;
}
else if(p1->zs > p2->zs) //第一个指数大于第二个指数,p1指针后移
{
if(p1->next==NULL){
p1->next=p2;
break;
}
else{
pre=p1;
p1=p1->next;
}
}
else if(p1->zs < p2->zs)//第一个指数小于第二个指数,准备在L1链表的pre节点上插入
{
if(p2->next==NULL)//如果p2已经是L2的最后一个节点
{
pre->next=p2;
p2->next=p1;
break;
}
else{//如果p2后面还有节点
pre->next=p2;
element * temp=p2->next;
p2->next=p1;
pre=p2;
p2=temp;
}
}
}
cout<<"L1+L2= ";
printlink(head1);
return 0;
}