用C++的单链表基本操作实现两个大整数相加运算
时间: 2024-06-15 22:08:34 浏览: 267
C++语言实现长整数相加减
使用C++的单链表可以实现两个大整数的相加运算。下面是实现的基本操作步骤:
1. 定义链表节点结构体:节点包含一个整数值和指向下一个节点的指针。
2. 创建两个链表,分别表示两个大整数。
3. 从个位开始逐位相加,将结果存储在新的链表中。
4. 如果相加结果超过9,则需要进位,将进位值加到下一位的相加结果中。
5. 如果其中一个链表已经遍历完,而另一个链表还有剩余位数,则直接将剩余位数添加到结果链表中。
6. 最后得到的结果链表即为两个大整数相加的结果。
以下是C++代码示例:
```cpp
#include <iostream>
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* dummy = new ListNode(0); // 创建一个虚拟头节点
ListNode* curr = dummy;
int carry = 0; // 进位值
while (l1 || l2 || carry) {
int sum = carry;
if (l1) {
sum += l1->val;
l1 = l1->next;
}
if (l2) {
sum += l2->val;
l2 = l2->next;
}
carry = sum / 10; // 计算进位值
curr->next = new ListNode(sum % 10); // 创建新节点存储相加结果的个位数
curr = curr->next;
}
return dummy->next; // 返回结果链表的头节点
}
int main() {
// 创建链表1,表示大整数123
ListNode* l1 = new ListNode(1);
l1->next = new ListNode(2);
l1->next->next = new ListNode(3);
// 创建链表2,表示大整数456
ListNode* l2 = new ListNode(4);
l2->next = new ListNode(5);
l2->next->next = new ListNode(6);
// 计算两个大整数的相加结果
ListNode* result = addTwoNumbers(l1, l2);
// 输出结果链表
while (result) {
std::cout << result->val << " ";
result = result->next;
}
return 0;
}
```
阅读全文