链表从后面开始加起,所以要考虑用容器去作为中介,stack是先进后出,非常的合适。
/**
* 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) {
// 从后面开始加起来,所以考虑先进后出 用到stack
if((l1 == NULL)||(l2 == NULL)) return NULL;
stack <int> s1;
stack <int> s2;
stack <int> s3;
ListNode* tmpl1 = l1;
ListNode* tmpl2 = l2;
ListNode* head = new ListNode(0);
ListNode* current = head;
while(tmpl1 != NULL){
s1.push(tmpl1->val);
tmpl1 = tmpl1->next;
}
while(tmpl2 != NULL){
s2.push(tmpl2->val);
tmpl2 = tmpl2->next;
}
int sum = 0;
int carry = 0;
int x = 0;
int y = 0;
while((s1.size() != 0)|| (s2.size() != 0)){
if(s1.size() != 0){
x = s1.top();
s1.pop();
}else
x = 0;
if(s2.size() != 0){
y = s2.top();
s2.pop();
}else
y = 0;
// get x ,y
sum = carry+x+y;
carry = sum/10;
s3.push(sum%10);
}
if(carry>0)
s3.push(carry);
while(s3.size()!=0){
current->next = new ListNode(s3.top());
current = current->next;
s3.pop();
}
return head->next;
}
};