LeetCode 002 Add Two Numbers

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
  • 相同情况下,递归的效率往往低于迭代,因此尽量使用迭代实现。
  • 我用递归是因为懒,别学我。
posted @ 2017-04-30 20:30  林剑宇  阅读(187)  评论(0编辑  收藏  举报