002 Add Two Numbers <= 原题戳这里
Difficulty: Medium
解题思路
给定的两个链表是由低位到高位的单向链表,因此可以直接依次计算,只需要注意进位即可。
用递归或者迭代的方式都可以解决问题。递归写起来代码比较简洁。
递归函数传入链表节点指针 l1 l2,同时增加一个进位标记 bool c
,返回值为结果链表指针。
递归基:l1 l2 链表指针均为
nullptr
且未产生进位,返回空指针即可。递归分解:
l 存放结果。
l->val = l1->val + l2->val
调用递归函数,传入 l1 l2 及进位标记。
递归返回值存入
l->next
。返回 l。
递归函数
这题比较简单,贴个递归函数吧
ListNode* AddNode(ListNode* l1, ListNode* l2, bool c)
{
if (l1 == nullptr && l2 == nullptr && !c)
{
return nullptr;
}
ListNode * l = new ListNode((c ? 1 : 0) + (l1 == nullptr ? 0 : l1->val) + (l2 == nullptr ? 0 : l2->val));
l->next = AddNode((l1 == nullptr ? l1 : l1->next), (l2 == nullptr ? l2 : l2->next), l->val > 9);
l->val %= 10;
return l;
}
PS
- 这个 _l_ 为啥显示的这么奇怪 ==> l
- 相同情况下,递归的效率往往低于迭代,因此尽量使用迭代实现。
- 我用递归是因为懒,别学我。