写一个函数进行多项式单链表加法
时间: 2024-09-27 10:06:51 浏览: 36
当然可以,我们可以编写一个函数来进行多项式单链表的加法操作。这里我们假设链表的每个节点存储一个多项式的系数(double类型)和指数(int类型)。这是一个简单的示例函数,名为`addPolynomialLists`:
```cpp
#include <iostream>
using namespace std;
// 定义链表节点结构体
struct ListNode {
double coef; // 系数
int expn; // 指数
ListNode* next; // 下一个节点指针
};
// 创建一个新的链表节点
ListNode* createNode(double coef, int expn) {
ListNode* newNode = new ListNode();
newNode->coef = coef;
newNode->expn = expn;
newNode->next = nullptr;
return newNode;
}
// 单链表加法函数
ListNode* addPolynomialLists(ListNode* La, ListNode* Lb) {
ListNode* resultHead = nullptr; // 结果链表的头
ListNode* tempResult = nullptr; // 临时结果节点
while (La && Lb) { // 当两者都不为空
if (La->expn == Lb->expn) { // 如果指数相等
double sum = La->coef + Lb->coef; // 计算当前项的系数和
if (sum != 0.0) {
tempResult = createNode(sum, La->expn); // 新增节点到结果链表
if (!resultHead) {
resultHead = tempResult;
} else {
tempResult->next = resultHead;
}
}
La = La->next; // 移动La
Lb = Lb->next; // 移动Lb
} else if (La->expn > Lb->expn) { // 如果La的指数大
tempResult = La; // 将La作为当前结果
La = La->next;
} else { // 否则,Lb的指数大
tempResult = Lb; // 将Lb作为当前结果
Lb = Lb->next;
}
}
// 处理未遍历完的情况
if (La) { // 如果La还有余下项
tempResult = La;
while (La->next) { // 将La剩下的项添加到结果链表
tempResult->next = La->next;
tempResult = La->next;
La = La->next;
}
tempResult->next = nullptr;
} else if (Lb) { // 如果Lb还有余下项
tempResult = Lb;
while (Lb->next) {
tempResult->next = Lb->next;
tempResult = Lb->next;
Lb = Lb->next;
}
tempResult->next = nullptr;
}
return resultHead; // 返回结果链表的头节点
}
// 打印链表
void printPolynomialList(ListNode* head) {
ListNode* temp = head;
while (temp) {
cout << temp->coef << "x^" << temp->expn << " ";
temp = temp->next;
}
cout << endl;
}
int main() {
// 示例使用
ListNode* La = createNode(1, 2); // 1x^2
ListNode* Lb = createNode(2, 1); // 2x^1
ListNode* result = addPolynomialLists(La, Lb);
printPolynomialList(result);
return 0;
}
```
这个例子中,`main`函数创建了两个简单的链表并进行了加法运算,然后打印出结果。你可以根据需要修改`main`函数,提供自己的链表数据。
阅读全文