两数相加c++解法
时间: 2023-07-01 09:18:36 浏览: 95
好的,下面是「两数相加」的 C++ 代码解法,采用链表遍历的思想:
```cpp
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* head = new ListNode(0);
ListNode* cur = head;
int carry = 0;
while (l1 || l2 || carry) {
int sum = (l1 ? l1->val : 0) + (l2 ? l2->val : 0) + carry;
carry = sum / 10;
cur->next = new ListNode(sum % 10);
cur = cur->next;
l1 = l1 ? l1->next : nullptr;
l2 = l2 ? l2->next : nullptr;
}
return head->next;
}
};
```
其中,我们创建一个虚拟头结点 $head$,然后用 $cur$ 指针来遍历链表,同时用 $carry$ 变量来记录进位。遍历过程中,我们将链表 $l1$ 和 $l2$ 对应的节点相加,并加上进位 $carry$,然后将和对 $10$ 取余后的结果作为新节点的值,同时更新进位。最后,我们将 $cur$ 指针指向新节点,并将 $l1$ 和 $l2$ 分别往后移动一个节点,直到遍历完整个链表。最后,我们只需要返回虚拟头结点 $head$ 的下一个节点即可。
阅读全文