class Solution {
public:
Node* reverseList(struct Node* head) {
struct Node* cur = head, *prev = NULL, *next = NULL;
while(cur != NULL) {
next = cur->next;
cur->next = prev;
prev = cur;
cur = next;
}
return prev;
}
Node* removeZero(struct Node* head) {
while(head != NULL && head->data == 0)
head = head->next;
return head;
}
Node* addTwoLists(Node* num1, Node* num2) {
// code here
num1 = removeZero(num1);
num2 = removeZero(num2);
num1 = reverseList(num1);
num2 = reverseList(num2);
Node *ret = NULL, *cur=NULL;
int carry = 0;
while(num1 || num2 || carry != 0) {
int sum = carry;
if(num1) {
sum += num1->data;
num1 = num1->next;
}
if(num2) {
sum += num2->data;
num2 = num2->next;
}
carry = sum/10;
Node *tmp = new Node(sum % 10);
if(ret == NULL) {
ret = tmp;
cur = tmp;
} else {
cur->next = tmp;
cur = cur->next;
}
}
return reverseList(ret);
}
};