头歌C++单链表大数相加
时间: 2024-10-04 13:02:37 浏览: 98
在C++中,当你需要处理两个大整数(超过计算机能直接存储范围)并使用单链表作为数据结构存储数字时,可以设计一个算法来模拟手动相加的过程。这通常涉及到创建两个链表来分别存储两个大数的每一位,并逐位相加,同时处理进位。
以下是基本步骤:
1. 定义一个节点类,包含一个整数值和指向下一个节点的指针。
```cpp
class ListNode {
public:
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
```
2. 创建函数接受两个链表的头节点和他们的最大长度(即链表中最大的位数)。初始化一个空链表,用于存放结果。
```cpp
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2, int len) {
ListNode dummy(0); // 添加虚拟头节点,使得链表操作更方便
ListNode* tail = &dummy; // 初始化尾部指针
int carry = 0; // 进位值
for (int i = 0; i < len || l1 != nullptr || l2 != nullptr; ++i) {
int num1 = l1 ? l1->val : 0;
int num2 = l2 ? l2->val : 0;
int sum = num1 + num2 + carry;
carry = sum / 10; // 计算当前位的进位
int digit = sum % 10; // 当前位的值
tail->next = new ListNode(digit);
tail = tail->next;
if (l1) l1 = l1->next;
if (l2) l2 = l2->next;
}
if (carry > 0) { // 如果还有剩余进位,添加一个新的节点
tail->next = new ListNode(carry);
}
return dummy.next; // 返回新链表的头节点
}
```
阅读全文