当前位置:   article > 正文

【leetcode】两数相加【中等】(C++递归解法)

【leetcode】两数相加【中等】(C++递归解法)

总体来说,链表类问题往往是蛮适合用递归的方式求解的

要写出有效的递归,关键是要考虑清楚:

0. return的条件

1. 每步递归的操作,以及何时调用下一步递归

2. 鲁棒性(头,尾结点等特殊情况是否依旧成立)

题目见下

结构体定义

  1. struct ListNode//在c++定义结构体时,typedef不是必须的
  2. {
  3. int val;
  4. ListNode *next;
  5. ListNode() : val(0), next(nullptr) {}
  6. ListNode(int x) : val(x), next(nullptr) {}
  7. ListNode(int x, ListNode *next) : val(x), next(next) {}
  8. };

递归解法

  1. class Solution {
  2. private:
  3. int k = 0; //用来记录进位
  4. public:
  5. ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
  6. if(l1 == nullptr && l2 == nullptr)
  7. {
  8. if(k == 1)
  9. {
  10. ListNode* t_node = new ListNode(1);
  11. return t_node;
  12. }
  13. else return nullptr;
  14. }
  15. else if(l1 == nullptr)
  16. {
  17. l2->val += k;
  18. if(l2->val != 10) return l2;
  19. else{
  20. k = 1;
  21. l2->next = addTwoNumbers(l1, l2->next);
  22. l2->val = 0;
  23. return l2;
  24. }
  25. }
  26. else if(l2 == nullptr)
  27. {
  28. l1->val += k;
  29. if(l1->val != 10) return l1;
  30. else{
  31. k = 1;
  32. l1->val = 0;
  33. l1->next = addTwoNumbers(l1->next, l2);
  34. return l1;
  35. }
  36. }
  37. else{
  38. l1->val += (l2->val + k);
  39. if(l1->val >= 10)
  40. {
  41. l1->val %= 10;
  42. k = 1;
  43. }
  44. else k = 0;
  45. l1->next = addTwoNumbers(l1->next, l2->next);
  46. return l1;
  47. }
  48. }
  49. };

~希望对你有启发~  

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/901996
推荐阅读
相关标签
  

闽ICP备14008679号