方法:使用栈
- 把两个链表压入到栈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;
}
};
京公网安备 11010502036488号