Leetcode:2. 两数相加(C++带详细注释)
/**
* 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) {
ListNode* l3=new ListNode;//用来从头到尾保存计算结果
ListNode*l4=l3;//一直指向头部,最后返回
int m=0;//进位值
while(l1!=nullptr||l2!=nullptr)//l1或l2非空时循环
{
if(l1!=nullptr&&l2!=nullptr)//都不空
{
l3->val=(l1->val+l2->val+m)%10;//结果值
m=(l1->val+l2->val+m)/10;//进位值
l1=l1->next;//往后遍历
l2=l2->next;
}
else if(l1!=nullptr)//l1非空,l2空
{
l3->val=(l1->val+m)%10;//结果值
m=(l1->val+m)/10;//进位值
l1=l1->next;//往后遍历
}
else if(l2!=nullptr)//l1空,l2非空
{
l3->val=(l2->val+m)%10;
m=(l2->val+m)/10;
l2=l2->next;
}
if(l1!=nullptr||l2!=nullptr)//下一步的l1,l2有非空,需要申请空间将l3后移
{
l3->next=new ListNode;
l3=l3->next;
}
else //或者都空但进位不为零,也需要为进位再申请一个空间
{
if(m>0)
{
l3->next=new ListNode(m);
}
}
}
return l4;
}
};