要求:链表两数相加,不能翻转
思路:不能反转就用栈
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
stack<int> s1,s2;
while(l1){
s1.push(l1->val);
l1=l1->next;
}
while(l2){
s2.push(l2->val);
l2=l2->next;
}
int carry=0;
ListNode *head=new ListNode();
ListNode *cur;
while(!s1.empty()&&!s2.empty()){
int num=s1.top()+s2.top()+carry;
carry=num/10;
num=num%10;
cur=new ListNode(num);
cur->next=head->next;
head->next=cur;
s1.pop();s2.pop();
}
while(!s1.empty()){
int num=s1.top()+carry;
carry=num/10;
num=num%10;
cur=new ListNode(num);
cur->next=head->next;
head->next=cur;
s1.pop();
}
while(!s2.empty()){
int num=s2.top()+carry;
carry=num/10;
num=num%10;
cur=new ListNode(num);
cur->next=head->next;
head->next=cur;
s2.pop();
}
if(carry){
cur=new ListNode(carry);
cur->next=head->next;
head->next=cur;
}
return head->next;
}
};