主要思路
因为本题不让翻转,所以我们考虑用栈来求解
首先定义两个栈,将链表1和链表2分别压入栈中 ,然后将栈顶数据弹出,相加后插入到新的链表中,注意使用头插法
struct ListNode{
int val;
ListNode *next;
ListNode(int x):val(x),next(nullptr){}
};
//主要思路,将两个链表分别压入栈中 然后弹出 相加 插入到新的链表中 头插法
class Solution {
public:
ListNode *addTwoNumbers(ListNode *l1,ListNode *l2) {
stack<int> s1,s2;
ListNode *lfir = l1, *lsec = l2;
while(lfir) {
s1.push(lfir->val);
lfir = lfir->next;
}
while(lsec) {
s2.push(lsec->val);
lsec = lsec->next;
}
int carry = 0;
ListNode *ret = nullptr;
while(!s1.empty() || !s2.empty()|| carry!=0) {
int a = s1.empty()?0:s1.top();
int b = s2.empty()?0:s2.top();
if(!s1.empty())s1.pop();
if(!s2.empty())s2.pop();
int ans = a+b+carry;
carry = ans/10;
ans%=10;
//头插法
ListNode *cur = new ListNode(ans);
cur->next = ret;//新结点的下一个结点指向头
ret = cur;//更新头结点为该新结点
}
return ret;
}
};