编写算法:将两个有序单链表合并(一元多项式的表示和相加)c++实现代码并运行
时间: 2024-10-13 09:19:02 浏览: 64
在C++中,我们可以编写一个算法来合并两个已排序的单链表,然后表示它们作为一元多项式,并将这两个多项式相加。这里我们假设每个节点包含整数值,可以视为多项式系数。首先,我们需要定义一个链表结构以及用于合并和相加的操作。
```cpp
#include <iostream>
using namespace std;
// 定义链表节点结构
struct ListNode {
int val; // 节点值
ListNode* next; // 指向下一个节点的指针
};
// 合并两个有序链表
ListNode* mergeSortedLists(ListNode* l1, ListNode* l2) {
if (l1 == nullptr) return l2;
if (l2 == nullptr) return l1;
if (l1->val < l2->val) {
l1->next = mergeSortedLists(l1->next, l2);
return l1;
} else {
l2->next = mergeSortedLists(l1, l2->next);
return l2;
}
}
// 将链表转换为多项式表达式字符串
string listToPolynomial(ListNode* head) {
string result = "";
while (head != nullptr) {
result += to_string(head->val) + "x^" + to_string(head->next == nullptr ? 0 : 1) + " ";
head = head->next;
}
return result.substr(0, result.size() - 1); // 去掉末尾空格
}
int main() {
// 创建示例链表
ListNode* list1 = new ListNode{1, new ListNode{2, new ListNode{4, nullptr}}};
ListNode* list2 = new ListNode{1, new ListNode{3, new ListNode{5, nullptr}}};
// 合并链表
ListNode* mergedList = mergeSortedLists(list1, list2);
// 输出合并后的多项式
cout << "合并后的多项式: " << listToPolynomial(mergedList) << endl;
return 0;
}
```
在这个例子中,我们首先创建了两个已排序的链表`list1`和`list2`,然后通过`mergeSortedLists`函数合并它们。最后,我们使用`listToPolynomial`函数将合并后的链表转换成一元多项式形式并打印出来。
注意:这个程序假设链表存储的是从常数项到最高次项(一次项、常数项等),并且对于两个相同的值,先添加的链表会被优先选择。如果你想处理更复杂的场景(比如保留第一个出现的相同值),你需要对`mergeSortedLists`进行相应的修改。
阅读全文