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