您的位置:首页 > 其它

[LeetCode]002-AddTwoNumber

2015-11-28 19:55 453 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode