一、题目
Leetcide第二题
二、思路
1
引入carry,默认为0。
2
当两个链表处于同一位的值都不为零时,两数相加再加上carry的值,若为个位数将该数赋予该节点;若为十位数,则还需将该数的十位赋予carry。
3
若两个链表中的一个在该节点处为空,则用0代替。
4
两链表都为空时,若carry的值不为零,需在尾部再插入carry的值。
三、用c++实现迭代法
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2)
{
ListNode *head = nullptr, *tail = nullptr;
int carry = 0;
while (l1!=0 || l2!=0)
{
int n1 =0;
if(l1!=0)
{
n1=l1->val;
}
int n2=0;
if(l2!=0)
{
n2=l2->val;
}
int sum = n1 + n2 + carry;
if (head==0)
{
head =tail = new ListNode(sum % 10);
}
else
{
tail->next = new ListNode(sum % 10);
tail = tail->next;
}
carry = sum / 10;
if (l1!=0)
{
l1 = l1->next;
}
if (l2!=0)
{
l2 = l2->next;
}
}
if (carry > 0)
{
tail->next = new ListNode(carry);
}
return head;
}
};
|