#include <stdio.h>
#include <stdlib.h>
typedef struct poly{
int a;
int m;
struct poly *next;
}polynomial;
//初始化链表头节点
polynomial* init_poly(int a,int m)
{
polynomial* poly = (polynomial*)malloc(sizeof(polynomial));
poly->a = a;
poly->m = m;
poly->next = NULL;
printf("addItem(%d,%d)\n",poly->a,poly->m);
printf("--------------------\n");
return poly;
}
void addItem(polynomial* poly, int a, int m)
{
polynomial* p = (polynomial*)malloc(sizeof(polynomial));
while(poly->next != NULL)
poly = poly->next;
p->next = NULL;
p->a = a;
p->m = m;
poly->next = p;
}
void display(polynomial* poly)
{
while(poly->next != NULL)
{
printf("(%d,%d)\n",poly->a,poly->m);
poly = poly->next;
if(poly->next == NULL)
printf("(%d,%d)\n",poly->a,poly->m);
}
printf("--------------------\n");
}
polynomial* findItem(polynomial* poly, int m)
{
bool find = false;
while(poly->next != NULL && find == false)
{
if(poly->m == m)
{
find = true;
return poly;
}else{
poly = poly->next;
if(poly->next == NULL){if(poly->m == m){find = true;return poly;}}
}
}
return NULL;
}
//把poly2合并到poly1中去
void addPoly(polynomial* poly1, polynomial* poly2)
{
polynomial *p;
polynomial *pFind;
do{
p = poly2;
pFind = findItem(poly1,p->m);
if(pFind != NULL)
{
pFind->a = p->a + pFind->a;
}else{
do{
if(p->m < poly1->m)
{
addItem(poly1,p->a,p->m);
break;
// polynomial* tmp = (polynomial*)malloc(sizeof(polynomial));
// tmp = p;
// pFind = findItem(poly1,poly1->m);
// pFind->next = tmp;
// tmp = pFind->next;
// tmp->next = tmp;
}
poly1 = poly1->next;
}while(poly1->next != NULL);
}
poly2 = poly2->next;
}while(poly2 != NULL);
}
int main()
{
polynomial* poly1 = init_poly(1,2);
addItem(poly1,2,3);
addItem(poly1,4,5);
polynomial* poly2 = init_poly(1,1);
addItem(poly2,2,2);
addItem(poly2,1,4);
display(poly1);
display(poly2);
addPoly(poly1,poly2);
display(poly1);
return 0;
}