1、思路
-
遍历两条链表累加其节点值,用一个
carry
变量表示进位,创建一条新链表,每次循环在新链表末尾追加一个累加值后的新节点; -
要注意两条链表长度不等的情况。
2、代码
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
if (l1 == nullptr && l2 == nullptr) return nullptr;
if (l1 == nullptr || l2 == nullptr) return l1 == nullptr ? l2 : l1;
auto head = new ListNode(0), p = head;
auto p1 = l1, p2 = l2;
int carry = 0;
while (p1 || p2)
{
if (p1)
{
carry += p1->val;
p1 = p1->next;
}
if (p2)
{
carry += p2->val;
p2 = p2->next;
}
p = p->next = new ListNode(carry % 10); //追加新节点,其值为累加后的值
carry /= 10;
}
if (carry) //判断最高位是否存在进位
{
p = p->next = new ListNode(1);
}
return head->next;
}
};