用栈分别存储两个加数,设置进位位c,结果节点ans。依次弹出两个栈的内容相加和进位处理,直到某个栈为空。再依次弹出不为空的栈。最后判断进位位c,是否要新建节点进行存储。
#include<stack>
using namespace std;
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head1 ListNode类
* @param head2 ListNode类
* @return ListNode类
*/
ListNode* addInList(ListNode* head1, ListNode* head2) {
stack<ListNode *> stk1, stk2;
while(head1!=nullptr) {
stk1.push(head1);
head1 = head1->next;
}
while(head2!=nullptr) {
stk2.push(head2);
head2 = head2->next;
}
ListNode *ans = nullptr;
int c = 0;
while(!stk1.empty() && !stk2.empty()){
ListNode *a = stk1.top();
stk1.pop();
ListNode *b = stk2.top();
stk2.pop();
a->val += b->val + c;
c = a->val / 10;
a->val %= 10;
a->next = ans;
ans = a;
}
if(!stk1.empty()) {
stk2 = stk1;
}
while(!stk2.empty()) {
ListNode *b = stk2.top();
stk2.pop();
b->val += c;
c = b->val / 10;
b->val /= 10;
b->next = ans;
ans = b;
}
if(c>0) {
ListNode *h =new ListNode(c);
h->next = ans;
ans = h;
}
return ans;
}
};

京公网安备 11010502036488号