给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 写一段C++代码实现
时间: 2023-08-22 15:07:54 浏览: 114
```cpp
#include <iostream>
using namespace std;
struct ListNode {
int val;
ListNode* next;
ListNode() : val(0), next(nullptr) {}
ListNode(int x) : val(x), next(nullptr) {}
ListNode(int x, ListNode* next) : val(x), next(next) {}
};
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* dummy = new ListNode(0);
ListNode* curr = dummy;
int carry = 0;
while (l1 != nullptr || l2 != nullptr) {
int x = (l1 != nullptr) ? l1->val : 0;
int y = (l2 != nullptr) ? l2->val : 0;
int sum = x + y + carry;
carry = sum / 10;
curr->next = new ListNode(sum % 10);
curr = curr->next;
if (l1 != nullptr) {
l1 = l1->next;
}
if (l2 != nullptr) {
l2 = l2->next;
}
}
if (carry > 0) {
curr->next = new ListNode(carry);
}
return dummy->next;
}
int main() {
// 创建链表 l1: 2 -> 4 -> 3
ListNode* l1 = new ListNode(2);
l1->next = new ListNode(4);
l1->next->next = new ListNode(3);
// 创建链表 l2: 5 -> 6 -> 4
ListNode* l2 = new ListNode(5);
l2->next = new ListNode(6);
l2->next->next = new ListNode(4);
// 调用函数进行相加
ListNode* result = addTwoNumbers(l1, l2);
// 输出结果链表
while (result != nullptr) {
cout << result->val << " ";
result = result->next;
}
return 0;
}
```
这段C++代码实现了将两个逆序存储的非负整数链表相加,并以相同形式返回一个表示和的链表。首先,我们定义了一个`ListNode`结构体来表示链表节点。然后,我们实现了`addTwoNumbers`函数来进行链表相加的操作。在函数中,我们使用了一个`dummy`节点作为结果链表的头节点,并使用一个`curr`指针来指向当前节点。我们还定义了一个`carry`变量来保存进位值。在循环中,我们依次遍历两个链表的节点,并将对应位置的数字相加,再加上进位值。然后,我们将相加结果的个位数作为新节点的值,并更新进位值。最后,如果还有进位值,我们在结果链表的末尾添加一个新节点。最后,我们返回结果链表的头节点。
以上是一种C++实现的方式,你可以根据需要进行调整和修改。
#### 引用[.reference_title]
- *1* [它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同...](https://blog.csdn.net/m0_56183819/article/details/124357484)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* [Leetcode 2.两数相加 两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的。](https://blog.csdn.net/qfxl0724/article/details/126048497)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同...](https://blog.csdn.net/m0_50672338/article/details/127810149)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文