方法:使用栈
- 把两个链表压入到栈1和栈2;
- 栈的最上面元素依次相加,并压入到另一个栈3;
- 如果栈1见底了,那么保证边界(最后的pre等于1)的同时把栈2剩下的全送到栈3;如果栈2见底则同理。
- 把栈3中的元素全打入新链表(过程是通过链表指针 l 的指针 pNode )。
/** * struct ListNode { * int val; * struct ListNode *next; * }; */ class Solution { public: /** * * @param head1 ListNode类 * @param head2 ListNode类 * @return ListNode类 */ ListNode* addInList(ListNode* head1, ListNode* head2) { // write code here stack<int> stack1, stack2, stack3; ListNode* l1 = head1, * l2 = head2; ListNode* l = nullptr; ListNode** pNode = &l; int pre = 0; while(l1 != nullptr) { stack1.push(l1->val); l1 = l1->next; } while(l2 != nullptr) { stack2.push(l2->val); l2 = l2->next; } while (!stack1.empty() && !stack2.empty()) { stack3.push((stack1.top() + stack2.top() + pre) % 10); pre = (stack1.top() + stack2.top() + pre) / 10; stack1.pop(); stack2.pop(); } // 如果stack2空了 if (stack2.empty()) { while(!stack1.empty()) { stack3.push((stack1.top() + pre) % 10); pre = (stack1.top() + pre) / 10; stack1.pop(); } if (pre == 1) { stack3.push(pre); } } // 如果stack1空了 if (stack1.empty()) { while(!stack2.empty()) { stack3.push((stack2.top() + pre) % 10); pre = (stack2.top() + pre) / 10; stack2.pop(); } if (pre == 1) { stack3.push(pre); } } while(!stack3.empty()) { *pNode = new ListNode(stack3.top()); pNode = &((*pNode)->next); stack3.pop(); } return l; } };