C语言链表实现多项式相加
时间: 2023-10-09 10:17:43 浏览: 118
```
#include <stdio.h>
#include <stdlib.h>
// 定义多项式节点
typedef struct PolyNode {
int coef; // 系数
int expon; // 指数
struct PolyNode *next; // 下一个节点指针
} PolyNode, *Polynomial;
// 创建多项式
Polynomial Create() {
int n, coef, expon;
Polynomial head, tail, p;
head = (Polynomial) malloc(sizeof(PolyNode)); // 创建头节点
tail = head;
scanf("%d", &n);
while (n--) {
scanf("%d %d", &coef, &expon);
p = (Polynomial) malloc(sizeof(PolyNode));
p->coef = coef;
p->expon = expon;
tail->next = p;
tail = p;
}
tail->next = NULL;
return head;
}
// 打印多项式
void Print(Polynomial p) {
if (!p) {
printf("0 0\n");
return;
}
int flag = 0; // 标记是否为第一项
while (p->next) {
p = p->next;
if (flag) printf(" ");
else flag = 1;
printf("%d %d", p->coef, p->expon);
}
printf("\n");
}
// 多项式相加
Polynomial Add(Polynomial p1, Polynomial p2) {
Polynomial head, tail, p;
head = (Polynomial) malloc(sizeof(PolyNode)); // 创建头节点
tail = head;
p1 = p1->next;
p2 = p2->next;
while (p1 && p2) {
if (p1->expon > p2->expon) {
p = (Polynomial) malloc(sizeof(PolyNode));
p->coef = p1->coef;
p->expon = p1->expon;
tail->next = p;
tail = p;
p1 = p1->next;
} else if (p1->expon < p2->expon) {
p = (Polynomial) malloc(sizeof(PolyNode));
p->coef = p2->coef;
p->expon = p2->expon;
tail->next = p;
tail = p;
p2 = p2->next;
} else {
p = (Polynomial) malloc(sizeof(PolyNode));
p->coef = p1->coef + p2->coef;
p->expon = p1->expon;
tail->next = p;
tail = p;
p1 = p1->next;
p2 = p2->next;
}
}
while (p1) {
p = (Polynomial) malloc(sizeof(PolyNode));
p->coef = p1->coef;
p->expon = p1->expon;
tail->next = p;
tail = p;
p1 = p1->next;
}
while (p2) {
p = (Polynomial) malloc(sizeof(PolyNode));
p->coef = p2->coef;
p->expon = p2->expon;
tail->next = p;
tail = p;
p2 = p2->next;
}
tail->next = NULL;
return head;
}
int main() {
Polynomial p1, p2, p;
p1 = Create();
p2 = Create();
p = Add(p1, p2);
Print(p);
return 0;
}
```