Problem:
You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Subscribe to see which companies asked this question
Solution(1)
第一次做的时候的答案:
ListNode* addTwoNumbers(ListNode* l1,ListNode* l2)
{
ListNode* result = new ListNode(0);
ListNode* temp;
ListNode* tml1;
ListNode* tml2;
vector<int> tl1;
vector<int> tl2;
int n,i,r,x,count;
tml1 = l1;
tml2 = l2;
while(tml1 != NULL)
{
tl1.push_back(tml1->val);
tml1 = tml1->next;
}
while(tml2 != NULL)
{
tl2.push_back(tml2->val);
tml2 = tml2->next;
}
if(tl1.size() > tl2.size())
{
n = tl1.size() - tl2.size();
while(n--)
{
tl2.insert(tl2.end(),0);
}
}
else
{
n = tl2.size() - tl1.size();
while(n--)
{
tl1.insert(tl1.end(),0);
}
}
n = tl1.size();
count = n;
i = 0;
x = 0;
temp = result;
while(n--)
{
r = tl1[i] + tl2[i] + x;
if(r<10)
{
x = 0;
temp->val = r;
}
else
{
x = 1;
temp->val = r-10;
}
if(i == count-1 && x == 1 ) //最后一位,且有进位
{
temp->next = new ListNode(0);
temp = temp->next;
temp->val = 1;
}
if(i < count - 1)
{
temp->next = new ListNode(0);
temp = temp->next;
}
i++;
}
return result;
}
Solution(2):
参考了网上的答案后:
ListNode* addTwoNumbers(ListNode* l1,ListNode* l2)
{
int cou = 0;
ListNode* result = new ListNode(0);
ListNode* temp;
temp = result;
while(l1 !=NULL || l2 != NULL)
{
int val1 = 0;
if(l1 != NULL)
{
val1 = l1->val;
l1 = l1->next;
}
int val2 = 0;
if(l2 != NULL)
{
val2 = l2->val;
l2 = l2->next;
}
int sum = val1 +val2 + cou;
if(sum < 10)
{
cou = 0;
temp->next = new ListNode(sum);
temp = temp->next;
}
else
{
cou = 1;
temp->next = new ListNode(sum - 10);
temp = temp->next;
}
}
if(cou == 1)
{
temp->next = new ListNode(1);
}
return result->next;
}