双链表的加法。
代码:
/**
* 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) {
vector<int> ans;
int overFlow = 0;
ListNode* tmpNode = NULL;
while(l1 != NULL||l2 != NULL||overFlow != 0)
{
int tmpVal,val;
if(l1 != NULL&&l2 != NULL)
{
tmpVal = l1->val+l2->val+overFlow;
if(tmpVal >= 10)
{
val = tmpVal%10;
overFlow = tmpVal/10;
}
else
{
val = tmpVal;
overFlow = 0;
}
}
else if(l1 == NULL&&l2 == NULL)
{
val = overFlow;
overFlow = 0;
}
else if(l1 == NULL)
{
tmpVal = l2->val+overFlow;
if(tmpVal >= 10)
{
val = tmpVal%10;
overFlow = tmpVal/10;
}
else
{
val = tmpVal;
overFlow = 0;
}
}
else if(l2 == NULL)
{
tmpVal = l1->val+overFlow;
if(tmpVal >= 10)
{
val = tmpVal%10;
overFlow = tmpVal/10;
}
else
{
val = tmpVal;
overFlow = 0;
}
}
ans.push_back(val);
if(l1)
{
l1 = l1->next;
}
if(l2)
{
l2 = l2->next;
}
}
int nSize = ans.size();
for(int i = nSize-1;i >= 0;i--)
{
ListNode* newNode = new ListNode(ans[i]);
newNode->next = tmpNode;
tmpNode = newNode;
}
return tmpNode;
}
};