链表遍历,注意进位,边界条件(如:链表为空等)。
时间复杂度:O(N)
C++代码:
class Solution {
public:
ListNode * addTwoNumbers(ListNode* l1, ListNode* l2) {
int flag = 0;
ListNode* l3;
if (l1->val + l2->val > 9)
{
l3 = new ListNode(l1->val + l2->val - 10);
flag = 1;
}
else
l3 = new ListNode(l1->val + l2->val);
ListNode* Now = l3;
while (l1->next != nullptr && l2->next != nullptr)
{
l1 = l1->next;
l2 = l2->next;
int sum;
sum = l1->val + l2->val + flag;
if (sum > 9)
{
sum -= 10;
flag = 1;
}
else
flag = 0;
Now->next = new ListNode(sum);
Now = Now->next;
}
while (l1->next != nullptr)
{
l1 = l1->next;
int sum = l1->val + flag;
if (sum > 9)
{
sum -= 10;
flag = 1;
}
else
flag = 0;
Now->next = new ListNode(sum);
Now = Now->next;
}
while (l2->next != nullptr)
{
l2 = l2->next;
int sum = l2->val + flag;
if (sum > 9)
{
sum -= 10;
flag = 1;
}
else
flag = 0;
Now->next = new ListNode(sum);
Now = Now->next;
}
if (flag)
{
Now->next = new ListNode(1);
}
return l3;
}
};