赞
踩
总体来说,链表类问题往往是蛮适合用递归的方式求解的
要写出有效的递归,关键是要考虑清楚:
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;
- }
- }
- };
-

~希望对你有启发~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。