您的位置:首页 > 其它

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:
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;

}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Add Two Numbers II