LeetCode 2. Add Two Numbers (两数相加)

电玩女神 2022-05-14 09:16 239阅读 0赞

题目描述:

给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。

你可以假设除了数字 0 之外,这两个数字都不会以零开头。

示例:

  1. 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
  2. 输出:7 -> 0 -> 8
  3. 原因:342 + 465 = 807

Accepted C++ Solution:

  1. /**
  2. * Definition for singly-linked list.
  3. * struct ListNode {
  4. * int val;
  5. * ListNode *next;
  6. * ListNode(int x) : val(x), next(NULL) {}
  7. * };
  8. */
  9. class Solution {
  10. public:
  11. ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
  12. ListNode preHead(0), *p = &preHead;
  13. int extra = 0;
  14. while(l1 || l2 || extra) {
  15. int sum = (l1 ? l1->val : 0) + (l2 ? l2->val : 0) + extra;
  16. extra = sum / 10;
  17. p -> next = new ListNode(sum%10);
  18. p = p->next;
  19. l1 = l1 ? l1->next : l1;
  20. l2 = l2 ? l2->next : l2;
  21. }
  22. return preHead.next;
  23. }
  24. };

递归法:

  1. /**
  2. * Definition for singly-linked list.
  3. * struct ListNode {
  4. * int val;
  5. * ListNode *next;
  6. * ListNode(int x) : val(x), next(NULL) {}
  7. * };
  8. */
  9. class Solution {
  10. public:
  11. ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
  12. if (l1 == NULL && l2 == NULL) return NULL;
  13. else if (l1 == NULL) return l2;
  14. else if (l2 == NULL) return l1;
  15. int a = l1->val + l2->val;
  16. ListNode* p = new ListNode(a%10);
  17. p->next = addTwoNumbers(l1->next,l2->next);
  18. if (a >= 10) p->next = addTwoNumbers(p->next, new ListNode(1));
  19. return p;
  20. }
  21. };

发表评论

表情:
评论列表 (有 0 条评论,239人围观)

还没有评论,来说两句吧...

相关阅读

    相关 2.相加 Add Two Numbers

    题目描述 给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回