输入:第一行输入m,n,用空格隔开分别代表两个多项式的项数;随后m+n行输入两个多项式的系数和指数(按照指数的降序输入),用空格隔开。
输出:两多项式的和
例:Input:2 2 Output: 2 2
2 2 4 1
1 1 2 0
3 1
2 0
代码如下:
#include <iostream>
/******************************
结构定义处
******************************/
typedef struct Lnode {
int coefficient;
int exponent;
Lnode *next;
}Lnode;
/*****************************
函数名:两多项式和函数
输入:两无头节点链表头p1,p2。按照指数降序排列。
输出:无头节点链表head,相加后的链表。
*****************************/
Lnode* PolyAdd(Lnode *p1, Lnode *p2)
{
/*头指针数据不要2*/
p1 = p1->next;
p2 = p2->next;
Lnode *ans, *head,*temp;
ans = new Lnode;
head = ans;
/*防止有空的多项式2*/
if (p1 == NULL) return p2;
else if (p2 == NULL) return p1;
else {
/*非空则进入1*/
while (p1&&p2) {
temp = new Lnode;
if (p1->exponent == p2->exponent)
{
temp->exponent = p1->exponent;
temp->coeficient = p1->coeficient + p2->coeficient;
ans->next = temp;
p1 = p1->next;
p2 = p2->next;
}
else if (p1->exponent>p2->exponent)
{
temp->coeficient = p1->coeficient;
temp->exponent = p1->exponent;
ans->next = temp;
p1 = p1->next;
}
else
{
temp->coeficient = p2->coeficient;
temp->exponent = p2->exponent;
ans->next = temp;
p2 = p2->next;
}
ans = temp;
}
/*一个多项式结束了,防止有另一个没有结束,将没有结束的直接传到目的指针(两个for循环)*/
for (;p1;p1 = p1->next)
{
temp = new Lnode;
temp->coeficient = p1->coeficient;
temp->exponent = p1->exponent;
ans->next = temp;
ans = temp;
}
for (;p2;p2 = p2->next)
{
temp = new Lnode;
temp->coeficient = p2->coeficient;
temp->exponent = p2->exponent;
ans->next = temp;
ans = temp;
}
ans->next = 0;
return head;
}
}
/************************
函数名:创建多项式链表函数
输入:多项式项数
输出:无头节点链表head,创建的链表头。
************************/
Lnode* CreatLnode(int n)
{
Lnode *p,*q,*head;
p = new Lnode;
head = p;
while(n--){
q = new Lnode;
std::cin>>q->coefficient>>q->expoent;
p->next = q;
p = q;
}
p->next = 0;
return head;
}
/************************
函数名:输出多项式链表函数
输入:头指针
输出:去掉头指针的所有项
************************/
void printLnode(Lnode* p)
{
p = p->next;
while (p)
{
std::cout << p->coefficient << " " << p->exponent<<std::endl;
p = p->next;
}
}
/************************
函数名:主函数
************************/
int main() {
Lnode *p1, *p2, *ans;
int l1, l2;
int* x, y;
std::cin >> l1 >> l2;
p1 = CreatLnode(l1);
p2 = CreatLnode(l2);
ans = PolyAdd(p1, p2);
printLnode(ans);
system("pause");
return 0;
}