[LeetCode 445]C++实现两数相加II
给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
进阶:
如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。
示例:
输入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 8 -> 0 -> 7
来源:力扣(LeetCode 445)
链接:https://leetcode-cn.com/problems/add-two-numbers-ii
方法:双栈
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
stack<int>l1_stack;
stack<int>l2_stack;
while(l1){
l1_stack.push(l1->val);
l1=l1->next;
}
while(l2){
l2_stack.push(l2->val);
l2=l2->next;
}
int carray=0;//进位
ListNode* head=NULL;
//carray>0代表有进位
while(!l1_stack.empty()||!l2_stack.empty()||carray>0){
int sum=carray;//继承进位
sum+=l1_stack.empty()?0:l1_stack.top();
if(!l1_stack.empty())
l1_stack.pop();
sum+=l2_stack.empty()?0:l2_stack.top();
if(!l2_stack.empty())
l2_stack.pop();
ListNode* temp=new ListNode(sum%10);//0~9
temp->next=head;
head=temp;
carray=sum/10;
}
return head;
}
};