如何用链表实现大数加减
时间: 2023-07-12 21:15:10 浏览: 184
用链表编写的一个加减乘运算器,实现任意大数的加减乘运算
4星 · 用户满意度95%
大数加减的实现可以通过链表来实现,具体步骤如下:
1. 定义链表节点结构体,包括节点值(val)和指向下一个节点的指针(next)。
2. 将两个大数分别存储在两个链表中,每个节点的值表示该位的数字。
3. 从链表头开始依次相加或相减对应节点的值,注意进位或借位的处理,将结果存储在新的链表中。
4. 如果链表长度不同,需要在短链表前面补0来使两个链表长度一致。
5. 最终得到的链表即为计算结果,将其转换为整数或字符串形式即可。
下面是一个 C++ 的实现示例:
```cpp
#include <iostream>
using namespace std;
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* dummy = new ListNode(0);
ListNode* cur = dummy;
int carry = 0;
while (l1 || l2) {
int x = l1 ? l1->val : 0;
int y = l2 ? l2->val : 0;
int sum = x + y + carry;
carry = sum / 10;
cur->next = new ListNode(sum % 10);
cur = cur->next;
if (l1) l1 = l1->next;
if (l2) l2 = l2->next;
}
if (carry) {
cur->next = new ListNode(carry);
}
return dummy->next;
}
int main() {
// 构造链表1: 342
ListNode* l1 = new ListNode(2);
l1->next = new ListNode(4);
l1->next->next = new ListNode(3);
// 构造链表2: 465
ListNode* l2 = new ListNode(5);
l2->next = new ListNode(6);
l2->next->next = new ListNode(4);
// 相加
ListNode* res = addTwoNumbers(l1, l2);
// 输出结果: 807
while (res) {
cout << res->val;
res = res->next;
}
cout << endl;
return 0;
}
```
阅读全文