题目
You are given two non-empty linked lists representing two non-negative integers. The most significant digit comes first and each of their nodes contains a single digit. Add the two numbers and return the sum as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Example 1:
Input: l1 = [7,2,4,3], l2 = [5,6,4]
Output: [7,8,0,7]
Example 2:
Input: l1 = [2,4,3], l2 = [5,6,4]
Output: [8,0,7]
Example 3:
Input: l1 = [0], l2 = [0]
Output: [0]
Constraints:
The number of nodes in each linked list is in the range [1, 100].
0 <= Node.val <= 9
It is guaranteed that the list represents a number that does not have leading zeros.
代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
stack<ListNode*> s1, s2;
for(ListNode* p = l1; p != NULL; )
{
s1.push(p);
p = p->next;
}
for(ListNode* p = l2; p != NULL; )
{
s2.push(p);
p = p->next;
}
int jinwei = 0;
stack<ListNode*> sRes;
while(!s1.empty() && !s2.empty())
{
int curVal = s1.top()->val + s2.top()->val + jinwei;
ListNode* curNode = new ListNode(curVal % 10);
sRes.push(curNode);
jinwei = curVal / 10;
s1.pop();
s2.pop();
}
if(!s1.empty())
{
while(!s1.empty())
{
int curVal = s1.top()->val + jinwei;
ListNode* curNode = new ListNode(curVal % 10);
jinwei = curVal / 10;
sRes.push(curNode);
s1.pop();
}
}
if(!s2.empty())
{
while(!s2.empty())
{
int curVal = s2.top()->val + jinwei;
ListNode* curNode = new ListNode(curVal % 10);
jinwei = curVal / 10;
sRes.push(curNode);
s2.pop();
}
}
if(jinwei)
{
ListNode* curNode = new ListNode(jinwei);
jinwei = 0;
sRes.push(curNode);
}
ListNode* res = NULL, *p = NULL;
while(!sRes.empty())
{
if(res == NULL)
{
res = sRes.top();
p = res;
}
else
{
p->next = sRes.top();
p = p->next;
}
sRes.pop();
}
return res;
}
};