LeetCode之两数相加(二)

举报
liuzhen007 发表于 2021/05/27 16:37:05 2021/05/27
【摘要】 题目 (原题链接:https://leetcode-cn.com/problems/add-two-numbers/) 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。...

题目

(原题链接:https://leetcode-cn.com/problems/add-two-numbers/

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

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

示例:


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

解题

由于两个链表中的位数是逆序的,所以和通常的位数计算顺序是一致的,即使两个链表的长短不一致,也不影响我们顺序遍历两个链表进行求和运行。具体请看代码:


  
  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. int more = 0;
  13. int sum = 0;
  14. ListNode* head = new ListNode(-1); // 创建一个节点,记录新链表的起始位置
  15. ListNode* cur = head;
  16. while(l1 != NULL || l2 != NULL || more != 0) {
  17. sum = (l1 ? l1->val : 0) + (l2 ? l2->val : 0) + more; // 顺序遍历元素求和,同时注意进位
  18. more = sum / 10;
  19. cur->next = new ListNode(sum % 10);
  20. cur = cur->next;
  21. if (l1 != NULL)
  22. l1 = l1->next;
  23. if (l2 != NULL)
  24. l2 = l2->next;
  25. }
  26. return head->next;
  27. }
  28. };

执行结果:

文章来源: liuzhen.blog.csdn.net,作者:Data-Mining,版权归原作者所有,如需转载,请联系作者。

原文链接:liuzhen.blog.csdn.net/article/details/106605353

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。