C语言用链表实现两个多项式相加
时间: 2024-10-09 18:16:18 浏览: 89
在C语言中,链表可以用来表示多项式的系数和次数这对元素的集合。为了实现两个多项式相加,我们可以创建一个结构体来存储每个节点,包含一个数值(代表系数)和一个指向前一个节点的指针(指向下一个节点)。以下是步骤:
1. 定义一个`Node`结构体,用于存储多项式的项:
```c
typedef struct Node {
int coefficient; // 系数
int degree; // 次数或指数
struct Node* next; // 指向下一个节点的指针
} PolynomialNode;
```
2. 创建两个`PolynomialNode`类型的头结点,并初始化它们作为空链表。
3. 分别遍历两个多项式的节点,将对应项相加。如果两个节点的次数相同,将系数相加并更新当前节点的值;如果其中一个节点的次数较高,将其移到结果链表的前面,另一节点的系数则加到下一个次数相同的节点上。
4. 遍历结束后,可能需要处理最后一个节点的特殊情况,如果它是第一个遍历结束,那么另一个多项式剩余的部分应该追加到结果链表的末尾。
5. 最后返回结果链表的头结点。
下面是简化版的示例代码:
```c
void addPoly(PolynomialNode** result, PolynomialNode* poly1, PolynomialNode* poly2) {
PolynomialNode* current1 = poly1;
PolynomialNode* current2 = poly2;
*result = (PolynomialNode*)malloc(sizeof(PolynomialNode)); // 初始化结果链表
while (current1 && current2) {
if (current1->degree == current2->degree) {
(*result)->coefficient += current1->coefficient + current2->coefficient;
} else if (current1->degree > current2->degree) {
(*result)->next = current1;
*result = *result->next;
current1 = current1->next;
} else { // current2->degree > current1->degree
(*result)->next = current2;
*result = *result->next;
current2 = current2->next;
}
}
// 如果有一个链表未遍历完,直接追加剩余部分
while (current1) {
(*result)->next = current1;
*result = *result->next;
current1 = current1->next;
}
while (current2) {
(*result)->next = current2;
*result = *result->next;
current2 = current2->next;
}
}
```
阅读全文