LeetCode:445. 两数相加 II(C++带详细注释)
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode*l3=nullptr;//存计算结果
if(l1==nullptr&&l2==nullptr) return l3;//全空直接返回
stack<ListNode*>s1,s2;//建立两个栈存l1,l2元素
while(l1)//将l1入栈
{
s1.push(l1);
l1=l1->next;
}
while(l2)//将l2入栈
{
s2.push(l2);
l2=l2->next;
}
int m=0;//存放进位值
int n=0;//存相加计算结果
int q=0;//存取整后结果
ListNode*tep1=new ListNode(0),*tep2=new ListNode(0);//存出栈临时值
while(!s1.empty()||!s2.empty()||m!=0)//栈有非空
{
if(!s1.empty())
{
tep1=s1.top();//取s1栈顶元素并出栈
s1.pop();
}
else tep1=nullptr;
if(!s2.empty())
{
tep2=s2.top();//取s2栈顶元素并出栈
s2.pop();
}
else tep2=nullptr;
n=(tep1?tep1->val:0)+(tep2?tep2->val:0)+m;//计算相加结果
q=n%10;//结果值
m=n/10;//进位值
ListNode*tep3=new ListNode(q);//存头插法临时值,一定要注意每次都要新建申请空间
tep3->next=l3;
l3=tep3;
}
return l3;//返回结果
}
};