https://leetcode-cn.com/problems/add-two-numbers/description/
给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
queue<int> s1;
queue<int> s2;
queue<int> s3;
queue<int> s4;
ListNode* ret;
while (l1)
{
s1.push(l1->val);
l1 = l1->next;
}
while (l2)
{
s2.push(l2->val);
l2 = l2->next;
}
while (!s1.empty() && !s2.empty())
{
int carry = 0;
int value1 = s1.front();
s1.pop();
int value2 = s2.front();
s2.pop();
int num = value1 + value2;
if (!s4.empty())
{
num += 1;
s4.pop();
}
if (num >= 10)
{
num = num % 10;
carry = 1;
}
s3.push(num);
if (carry)
{
s4.push(carry);
}
}
if (s1.empty() && s2.empty())
{
if (!s4.empty())
{
s3.push(1);
}
}
else
{
while (!s1.empty())
{
if (!s4.empty())
{
if (s1.front() + 1 >= 10)
{
s3.push((s1.front() + 1) % 10);
s4.push(1);
}
else
{
s3.push(s1.front() + 1);
}
s1.pop();
s4.pop();
}
else
{
s3.push(s1.front());
s1.pop();
}
}
while (!s2.empty())
{
if (!s4.empty())
{
if (s2.front() + 1 >= 10)
{
s3.push((s2.front() + 1) % 10);
s4.push(1);
}
else
{
s3.push(s2.front() + 1);
}
s2.pop();
s4.pop();
}
else
{
s3.push(s2.front());
s2.pop();
}
}
while (!s4.empty())
{
s3.push(1);
s4.pop();
}
}
ListNode* cur = new ListNode(s3.front());
s3.pop();
ret = cur;
while (!s3.empty())
{
cur->next = new ListNode(s3.front());
s3.pop();
cur = cur->next;
}
return ret;
}
};