写一个函数进行多项式单链表加法c语言
时间: 2024-09-27 08:07:05 浏览: 36
在C语言中,你可以编写一个函数来实现两个多项式的单链表相加。首先,我们需要定义一个结构体表示多项式的系数和指数,然后创建一个节点结构,接着构造链表并处理链表的合并。以下是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct CoeffExpNode {
int coefficient; // 系数
int exponent; // 指数
struct CoeffExpNode* next; // 指向下一个节点
} PolynomialNode;
// 创建一个新的多项式节点
PolynomialNode* createNode(int coefficient, int exponent) {
PolynomialNode* newNode = (PolynomialNode*)malloc(sizeof(PolynomialNode));
newNode->coefficient = coefficient;
newNode->exponent = exponent;
newNode->next = NULL;
return newNode;
}
// 将两个多项式节点相加
PolynomialNode* addCoefficients(PolynomialNode* node1, PolynomialNode* node2) {
if (!node1) return node2;
if (!node2) return node1;
int sumCoefficient = node1->coefficient + node2->coefficient;
PolynomialNode* newNode = createNode(sumCoefficient, node1->exponent);
newNode->next = addCoefficients(node1->next, node2->next);
return newNode;
}
// 结合递归调用将整个链表相加
PolynomialNode* polynomialAddition(PolynomialNode* list1, PolynomialNode* list2) {
PolynomialNode* resultHead = NULL;
if (list1 == NULL) return list2;
else if (list2 == NULL) return list1;
// 如果第一个列表的头节点系数大于第二个,则交换位置
if (list1->coefficient > list2->coefficient) {
PolynomialNode* temp = list1;
list1 = list2;
list2 = temp;
}
// 添加当前节点并更新链表头部
PolynomialNode* newNode = addCoefficients(list1, list2);
resultHead = newNode;
// 继续添加剩余节点
newNode = addCoefficients(list1->next, list2->next);
newNode->next = resultHead; // 将结果头部链接到新的链表
return newNode;
}
// 打印多项式链表
void printPolynomial(PolynomialNode* head) {
while (head != NULL) {
printf("%d * x^%d ", head->coefficient, head->exponent);
head = head->next;
}
printf("\n");
}
int main() {
PolynomialNode* list1 = createNode(2, 0); // 2x^0
list1->next = createNode(3, 1); // 3x^1
PolynomialNode* list2 = createNode(4, 0); // 4x^0
list2->next = createNode(5, 2); // 5x^2
PolynomialNode* result = polynomialAddition(list1, list2);
printf("Polynomial Addition:\n");
printPolynomial(result);
return 0;
}
```
这个程序会计算并打印出 `2x^0 + 3x^1` 和 `4x^0 + 5x^2` 的和。
阅读全文