Add Two Numbers II
2017-04-18 15:11
155 查看
Add Two Numbers II
You are given two non-empty linked lists representing two non-negative integers. The most significant digit comes first and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Follow up:
What if you cannot modify the input lists? In other words, reversing the lists is not allowed.
Example:
解析: 开始以为数据在int范围内后来意识到时不限位数只能像字符串相加一样计算
代码:
/**
* 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>num1;
vector<int>num2;
if (l1==NULL||l2==NULL) return NULL;
while(l1)
{
num1.push_back(l1->val);
l1=l1->next;
}
while(l2)
{
num2.push_back(l2->val);
l2=l2->next;
}
int bit=0;
int p1=num1.size();
int p2=num2.size();
vector<int>ans;
// int curbit=ans.size()-1;
while(p1&&p2)
{
int bitsum=num1[p1-1]+num2[p2-1];
bitsum+=bit;
ans.push_back(bitsum%10);
bit=bitsum/10;
p1--;
p2--;
}
while(p1)
{
int bitsum=num1[p1-1]+bit;
ans.push_back(bitsum%10);
bit=bitsum/10;
p1--;
}
while(p2)
{
int bitsum=num2[p2-1]+bit;
ans.push_back(bitsum%10);
bit=bitsum/10;
p2--;
}
if (bit)
{
ans.push_back(bit);
}
ListNode * pnode;
if (!ans.empty())
pnode=new ListNode(ans[ans.size()-1]);
ListNode * anshead=pnode;
for (int i=ans.size()-2; i>=0; i--)
{
pnode->next=new ListNode(ans[i]);
pnode=pnode->next;
}
pnode->next=NULL;
return anshead;
}
};
You are given two non-empty linked lists representing two non-negative integers. The most significant digit comes first and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Follow up:
What if you cannot modify the input lists? In other words, reversing the lists is not allowed.
Example:
Input: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 8 -> 0 -> 7
解析: 开始以为数据在int范围内后来意识到时不限位数只能像字符串相加一样计算
代码:
/**
* 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>num1;
vector<int>num2;
if (l1==NULL||l2==NULL) return NULL;
while(l1)
{
num1.push_back(l1->val);
l1=l1->next;
}
while(l2)
{
num2.push_back(l2->val);
l2=l2->next;
}
int bit=0;
int p1=num1.size();
int p2=num2.size();
vector<int>ans;
// int curbit=ans.size()-1;
while(p1&&p2)
{
int bitsum=num1[p1-1]+num2[p2-1];
bitsum+=bit;
ans.push_back(bitsum%10);
bit=bitsum/10;
p1--;
p2--;
}
while(p1)
{
int bitsum=num1[p1-1]+bit;
ans.push_back(bitsum%10);
bit=bitsum/10;
p1--;
}
while(p2)
{
int bitsum=num2[p2-1]+bit;
ans.push_back(bitsum%10);
bit=bitsum/10;
p2--;
}
if (bit)
{
ans.push_back(bit);
}
ListNode * pnode;
if (!ans.empty())
pnode=new ListNode(ans[ans.size()-1]);
ListNode * anshead=pnode;
for (int i=ans.size()-2; i>=0; i--)
{
pnode->next=new ListNode(ans[i]);
pnode=pnode->next;
}
pnode->next=NULL;
return anshead;
}
};
相关文章推荐
- LeetCode 445 Add Two Numbers II(栈+链表)
- LeetCode Add Two Numbers II
- LeetCode-Add Two Numbers II
- Leetcode: Add Two Numbers II
- [LeetCode] Add Two Numbers II 两个数字相加之二
- Populating Next Right Pointers in Each Node I,II,Add Two Numbers,Integer to Roman
- [Lintcode] Add Two Numbers I && II
- LeetCode #445: Add Two Numbers II
- 大整数相加--链表结构正向存储--Add Two Numbers II
- Single Number && Single Number II && Factorial Trailing Zeroes && Pow(x, n) && Add Two Numbers
- Medium 445题 Add Two Numbers II
- [LeetCode]Add Two Numbers II
- Leetcode Day6 2. Add Two Numbers I & II
- Add Two Numbers II
- LeetCode#445 Add Two Numbers II (week15)
- LeetCode 445 Add Two Numbers II
- leetcode 445 Add Two Numbers II C++
- Add Two Numbers II
- Leetcode Add Two Numbers II
- [leetcode445】Add Two Numbers II