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
  • 相同情况下,递归的效率往往低于迭代,因此尽量使用迭代实现。
  • 我用递归是因为懒,别学我。

转载于:https://www.cnblogs.com/XenonZinc/p/6790307.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值