题目:

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

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

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

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

涉及到的知识点:

C++链表及其创建

C++链表的创建在此不再赘述,主要是由结构体来定义。主要说一下使用构造函数初始化结点的问题。

如下函数是利用构造函数对链表进行初始化的代码

struct ListNode
{double value;ListNode *next;//构造函数ListNode(double valuel, ListNode *nextl = nullptr){value = value1;next = next1;}
};

创建一个短的链表存储两个值,第一个值是12.5,第二个值是13.5。

代码如下:

ListNode *secondPtr = new ListNode(13.5);
ListNode *head = new ListNode(12.5, secondPtr);

因为构造函数里面对链表的值和移动指针都进行初始化了,所以我们可以简化代码,如下:

ListNode *head = new ListNode(13.5);
head = new ListNode(12.5, head);

基本的知识点也就这些理解了之后基本可以理解以下题解代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode* head=new ListNode(-1);//存放结果的链表
        ListNode* h=head;//移动指针
        int sum=0;//每个位的加和结果
        bool carry=false;//进位标志
        while(l1!=NULL||l2!=NULL)
        {
            sum=0;
            if(l1!=NULL)
            {
                sum+=l1->val;
                l1=l1->next;
            }
            if(l2!=NULL)
            {
                sum+=l2->val;
                l2=l2->next;
            }
            if(carry)
                sum++;
            h->next=new ListNode(sum%10);
            h=h->next;
            carry=sum>=10?true:false;
        }
        if(carry)
        {
            h->next=new ListNode(1);
        }
        ptrDelete = head;

//由于之前初始创建的 val = -1 的节点没有释放啊,c++要手动释放,否则调用次数多会溢出

head = head->next;

delete ptrDelete;

return head;
    }
};

算法练习之leetcode两数相加(1)相关推荐

  1. LeetCode两数相加

    一.两数相加 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字. 请你将两个数相加,并以相同形式返回一个表示和的链表. 你可以假设 ...

  2. leetcode 两数相加

    给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 -& ...

  3. 简单算法题:leetcode-2 两数相加

    算法撸一遍,从简单的开始. 做leetcode题目的时候,经常百度答案,但感觉大多不是我想要的,很多我不能理解.现在也做了一些算法题,哪些并不是很深奥,但需要一些技巧,简单的算法题更多的是经验值.这里 ...

  4. leetcode 两数相加c++_167. 两数之和 II - 输入有序数组

    167. 两数之和 II - 输入有序数组 给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数. 函数应该返回这两个下标值 index1和 index2,其中 index1必须小 ...

  5. leetcode 两数相加,在ubuntu上编译通过,显示结果了,在leetcode上报错了,找错在哪?

    给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字. 请你将两个数相加,并以相同形式返回一个表示和的链表. 你可以假设除了数字 0 ...

  6. leetcode第一题两数相加

    leetcode两数相加: 提示: 问题描述: int* twoSum(int* nums, int numsSize, int target, int* returnSize) {for (int ...

  7. leetcode算法—两数相加 Add Two Numbers

    关注微信公众号:CodingTechWork,一起学习进步. 题目 Add Two Numbers: You are given two non-empty linked lists represen ...

  8. 【前端来刷LeetCode】两数之和与两数相加

    大部分玩前端的小伙伴,在算法上都相对要薄弱些,毕竟调样式.调兼容就够掉头发的了,哪还有多余的头发再去折腾. 确实在前端中需要使用到算法的地方是比较少,但若要往高级方向发展,算法的基本功就非常重要啦.对 ...

  9. 两数之和,两数相加(leetcode)

    我们都知道算法是程序员成长重要的一环,怎么才能提高算法呢, 出来在网上看视频之外,动手练习是非常重要的.leetcode 就是一个非常好的锻炼平台. 1. 两数之和,在 leetcode 里面是属于 ...

最新文章

  1. Java还欠缺什么才能真正支持机器/深度学习?
  2. 什么原数据更容易平稳_【时间序列】-航空数据预测
  3. 自学python找工作难吗-大四应届毕业生,学了两个月Python,找工作感觉好难啊?...
  4. 单引号和冒号不能存入mysql么_mysql单引号和双引号的用法
  5. Python学习——collections系列
  6. 使用TensorFlow在Transformers 上生成字幕的注意机制的实现
  7. I2C(smbus、pmbus)和 SPI协议
  8. 【黑苹果镜像】macOS Monterey 12.3正式版 (21E230) With OpenCore 0.7.9 and Clover 5144 and winPE原版镜像
  9. 像“毒液”一样的粘液机器人火了,能取出体内异物,穿过1.5mm细缝无压力!...
  10. 中南大学计算机学院闭委,2019-2020计算机学院第一学期学委会议顺利召开
  11. 微信小程序运用云函数调用新闻类API
  12. [MTCTF]从出题人视角看ez_cms
  13. 4-Python3从入门到实战—基础之数据类型(字符串-String)
  14. == 和 ===的区别
  15. 亲爱的老狼-搜索引擎的区分及现在各大浏览器的引擎细分
  16. bootice添加黑苹果引导_NUC8 x 黑苹果抄作业续集,快速迁移 OpenCore + 升级 Big Sur...
  17. msysgit使用说明
  18. linux 服务器 病毒,Linux 服务器中木马病毒及清除过程
  19. mp3音频转换器哪个好
  20. ryu实例---自学习交换机

热门文章

  1. carbon abatement
  2. 如何做波动率的分析呢?
  3. 合批只是对CPU的优化,与GPU没有任何关系
  4. 博客园今天将排名计算错误了
  5. MaBatis(5)输入/输出映射
  6. 看我如何发现Uber合作方网站XXE 0day漏洞并获得9000美元赏金
  7. RESTful设计原则和样例(开发前后台接口)
  8. HBase API 详细例子(封装的DAO类)
  9. 10分钟理解依赖注入
  10. java-基础-变量