总体来说,链表类问题往往是蛮适合用递归的方式求解的
要写出有效的递归,关键是要考虑清楚:
0. return的条件
1. 每步递归的操作,以及何时调用下一步递归
2. 鲁棒性(头,尾结点等特殊情况是否依旧成立)
题目见下
结构体定义
struct ListNode//在c++定义结构体时,typedef不是必须的
{
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 { private: int k = 0; //用来记录进位 public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { if(l1 == nullptr && l2 == nullptr) { if(k == 1) { ListNode* t_node = new ListNode(1); return t_node; } else return nullptr; } else if(l1 == nullptr) { l2->val += k; if(l2->val != 10) return l2; else{ k = 1; l2->next = addTwoNumbers(l1, l2->next); l2->val = 0; return l2; } } else if(l2 == nullptr) { l1->val += k; if(l1->val != 10) return l1; else{ k = 1; l1->val = 0; l1->next = addTwoNumbers(l1->next, l2); return l1; } } else{ l1->val += (l2->val + k); if(l1->val >= 10) { l1->val %= 10; k = 1; } else k = 0; l1->next = addTwoNumbers(l1->next, l2->next); return l1; } } };
~希望对你有启发~