题解 | #链表相加(二)#
链表相加(二)
https://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b
//笨蛋方法,使用了三个栈来相加,出错误点在于需要每次给temp new 空间
class Solution {
public:
/**
*
* @param head1 ListNode类
* @param head2 ListNode类
* @return ListNode类
*/
ListNode* addInList(ListNode* head1, ListNode* head2) {
ListNode* fast = head1, * slow = head2;
ListNode* nList = new ListNode(0);
ListNode* nHead = nList;
int sign = 0;
stack<ListNode*>stack1, stack2,stack3;
while (fast)
{
stack1.push(fast);
fast = fast->next;
}
while (slow)
{
stack2.push(slow);
slow = slow->next;
}
while ((!stack1.empty()) && (!stack2.empty()))
{
ListNode* temp = new ListNode(0);
temp->val = (stack1.top()->val + stack2.top()->val + sign)%10;
if (stack1.top()->val + stack2.top()->val + sign >= 10)
{
sign = 1;
}
else
{
sign = 0;
}
stack1.pop();
stack2.pop();
stack3.push(temp);
cout << temp->val<<"a";
}
while (!stack1.empty())
{
ListNode* temp = new ListNode(0);
temp->val = (stack1.top()->val + sign) % 10;
if (stack1.top()->val + sign >= 10)
{
sign = 1;
}
else
{
sign = 0;
}
stack3.push(temp);
stack1.pop();
cout << temp->val << "b";
}
while (!stack2.empty())
{
ListNode* temp = new ListNode(0);
temp->val = (stack2.top()->val + sign) % 10;
if (stack2.top()->val + sign >= 10)
{
sign = 1;
}
else
{
sign = 0;
}
stack3.push(temp);
stack2.pop();
cout << temp->val << "c";
}
while (!stack3.empty())
{
if (sign == 1)
{
nList->val = 1;
}
nList->next = stack3.top();
stack3.pop();
nList = nList->next;
}
if (nHead->val == 0)
{
return nHead->next;
}
else {
return nHead;
}
}
};