C++版:
主要考虑相同位置相加有没有进位,这里用Carry标注
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode *p=new ListNode(-1);
ListNode *q=p;
int carry=0;
while(l1||l2)
{
int val1= l1?l1->val:0;//为空时做加法的位数为0
int val2= l2?l2->val:0;
int val3=val1+val2+carry;
if(val3>=10)
{
val3=val3-10;
carry=1;
}
else
carry=0;
q->next = new ListNode(val3);
q=q->next;
l1=l1?l1->next:l1;
l2=l2?l2->next:l2;
}
if(carry==1)
q->next = new ListNode(1);
return p->next;
}
};