用栈分别存储两个加数,设置进位位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;
    }
};