本题思路:链表递归。
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
return add(l1, l2, 0);
}
ListNode* add(ListNode* l1, ListNode* l2, int val){
if(l1 == nullptr && l2 == nullptr && val == 0){//基线条件:递归结束的条件
/*结点计算完毕返回空,此时依次运行上一次递归的最后一行代码return node,
形成完整的链表*/
return NULL;
}
//val值通过两次if求出两个链表对应结点的和
if(l1 != nullptr){
val += l1->val;
l1 = l1->next;
}
if(l2 != nullptr){
val += l2->val;
l2 = l2->next;
}
//创建新的链表,val值对10求余保证单个结点的值不超过10
ListNode* node = new ListNode(val % 10);
//将val除10来作为下一次递归的val值,以此判断是否进位
node->next = add(l1, l2, val / 10);//递归条件:递归继续的条件
return node;
}