LeetCode第二题(两数相加)

简介: 这篇文章是关于LeetCode上第二题“两数相加”的题解,其中详细描述了如何使用C++语言来实现将两个逆序存储的非负整数链表相加,并返回结果链表的算法。

题目描述:

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

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

/**
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode* retNode = new ListNode(0);
        ListNode* curNode = retNode;
        int sum = 0;
        while(l1 || l2 || sum){
            if(l1) sum+= l1->val,l1 = l1->next;
            if(l2) sum+= l2->val,l2 = l2->next;
            //将值赋值给节点的val
            curNode->next = new ListNode(sum % 10);
            //当前节点指针向后移动
            curNode = curNode->next;
            //获取进位值
            sum /=10;
        }
        return retNode->next;
    }
};

先创建一个链表retNode用来保存新生成的链表中的数据,创建一个指向retNode表头的节点指针curNodesum用来保存当前l1的节点值与l2节点值的和,循环遍历链表即可,l1表不为空,sum累加上l1当前节点的值,然后l1指针向后移,l2同理。因为存在满10进位的情况,故向新链表中存入数据时应该存入sum%10;然后curNode向后移,将sum置为进位值sum/10即可。循环条件有sum是因为,当下方图片情况l1l2同时nullptr时,还存在进位的情况。最后返回retNode->next即可.因为retNode第一个节点并未存储数据。

相关文章
|
机器学习/深度学习 存储 并行计算
一篇就够:高性能推理引擎理论与实践 (TensorRT)
本文分享了关于 NVIDIA 推出的高性能的深度学习推理引擎 TensorRT 的背后理论知识和实践操作指南。
13908 9
一篇就够:高性能推理引擎理论与实践 (TensorRT)
|
12月前
|
C++
Leetcode第54题(螺旋矩阵)
这篇文章介绍了LeetCode第54题“螺旋矩阵”的解题思路和C++的实现代码,该题目要求按照顺时针螺旋顺序返回给定矩阵中的所有元素。
127 1
Leetcode第54题(螺旋矩阵)
|
分布式计算 大数据 Apache
【大数据技术】流数据、流计算、Spark Streaming、DStream的讲解(图文解释 超详细)
【大数据技术】流数据、流计算、Spark Streaming、DStream的讲解(图文解释 超详细)
599 0
|
SQL 开发框架 Ubuntu
阿里云轻量应用服务器系统镜像和应用镜像区别及选择
阿里云轻量应用服务器可选应用镜像和系统镜像,应用镜像和系统镜像有什么如何?阿里云轻量应用服务器操作系统如何选择镜像?笔者分享阿里云轻量应用服务器应用镜像和系统镜像的区别及选择方法:
阿里云轻量应用服务器系统镜像和应用镜像区别及选择
|
12月前
|
存储 算法
Leetcode第三题(无重复字符的最长子串)
这篇文章介绍了解决LeetCode第三题“无重复字符的最长子串”的算法,使用滑动窗口技术来找出给定字符串中最长的不含重复字符的子串,并提供了详细的代码实现和解释。
552 0
Leetcode第三题(无重复字符的最长子串)
|
12月前
|
C++
数组元素移除(暴力求解)
一种原地移除数组中特定值元素的暴力求解方法,并通过C++代码示例展示了如何实现这一操作。
76 0
|
12月前
|
C++
Leetcode第十三题(罗马数字转整数)
这篇文章介绍了LeetCode第13题“罗马数字转整数”的解题方法,通过一个C++的类`Solution`中的`romanToInt`函数来实现,该函数使用哈希表和遍历字符串的方法,根据罗马数字的规则将输入的罗马数字字符串转换为对应的整数值。
154 0
|
12月前
|
C++
Leetcode第56题(合并区间)
这篇文章介绍了LeetCode第56题“合并区间”的解题方法,通过排序和贪心策略合并重叠区间,并提供了C++的代码实现。
189 0
Leetcode第56题(合并区间)
|
12月前
|
算法
Leetcode第46题(全排列)
这篇文章介绍了LeetCode第46题“全排列”的解题方法,使用深度优先搜索(DFS)和回溯算法来生成给定数组的所有可能排列。
152 0
Leetcode第46题(全排列)