C++程序:给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
时间: 2023-08-22 16:57:35 浏览: 116
你可以使用迭代的方法来实现链表的相加操作。具体步骤如下:
1. 创建一个新的链表作为结果链表的头节点,同时创建一个指针指向该链表的当前节点。
2. 初始化两个指针分别指向两个输入链表的头节点。
3. 初始化进位值为0。
4. 遍历两个链表,直到两个链表都遍历完为止:
- 计算当前位置的和:将两个链表当前位置的值相加,再加上进位值。
- 更新进位值:将和除以10,取整数部分作为新的进位值。
- 创建一个新的节点,节点的值为和的余数。
- 将新节点连接到结果链表的当前节点后面。
- 移动指针:将指针指向下一个节点。
5. 如果某个链表还没遍历完,继续遍历剩余部分并进行相加操作,同时考虑进位值。
6. 如果最后还有进位值,创建一个新节点,并将其连接到结果链表的末尾。
7. 返回结果链表的头节点。
下面是相应的 C++ 代码实现:
```cpp
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) {
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;
}
if (carry > 0) {
curr->next = new ListNode(carry);
}
ListNode* result = dummy->next;
delete dummy;
return result;
}
```
希望对你有帮助!如果有任何疑问,请随时提问。
阅读全文