您的位置:首页 > 其它

Add Two Number

2016-02-16 16:04 260 查看
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

题目难度中等,主要要考虑进位处理

struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};

/**
*类似于归并排序中的两数组合并,这里要考虑每个value为个位数字
*最终可能有剩余的进位要处理
**/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode * result = new ListNode(0);
ListNode * it=result;
int remain = 0;
while (l1!=NULL&&l2!=NULL) {
handle(it,l1->val,l2->val,remain);
l1 = l1->next;
l2 = l2->next;
}
while (l1!=NULL) {
handle2(it,l1->val,remain);
l1 = l1->next;
}
while (l2!=NULL) {
handle2(it,l2->val,remain);
l2 = l2->next;
}
if (remain)
{
it->next = new ListNode(remain);
}
return result->next;
}
void handle(ListNode *& it,int v1,int v2,int & remain) {
int digital = (v1+v2+remain)%10;
remain = (v1+v2+remain)/10;
it->next = new ListNode(digital);
it = it->next;
}
void handle2(ListNode *& it,int v,int & remain)
{
int digital = (v+remain)%10;
remain = (v+remain)/10;
it->next = new ListNode(digital);
it = it->next;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: