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
solutions:
從最低位相加,保存一個進位即可
/**
* 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) {
if(l1 == NULL && l2 == NULL) {
return NULL;
}
else if(l1 == NULL) {
return l2;
}
else if(l2 == NULL) {
return l1;
}
int jinWei=0;
// ListNode *ret=new ListNode(0);
ListNode *r=NULL, *ret=NULL, *prev=NULL;
ListNode *i1=l1, *i2=l2;
for(i1=l1, i2=l2; i1!=NULL&&i2!=NULL; i1=i1->next, i2=i2->next) {
r=new ListNode(0);
if(ret == NULL) {
ret = r;
prev=r;
}else{
prev->next=r;
prev=r;
}
int val = i1->val + i2->val +jinWei;
if(val < 10) {
r->val = val;
jinWei = 0;
}else{
jinWei = 1;
r->val = val-10;
}
}
if(i2 != NULL) {
i1 = i2;
}
while(i1 != NULL) {
r=new ListNode(0);
if(ret == NULL) {
ret = r;
prev=r;
}else{
prev->next=r;
prev=r;
}
int val=i1->val+jinWei;
if(val<10) {
r->val = val;
jinWei = 0;
}else{
jinWei=1;
r->val = val-10;
}
i1=i1->next;
}
if(jinWei == 1) {
r = new ListNode(1);
prev->next=r;
}
return ret;
}
};