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第一个节点并未存储数据。

相关文章
|
1天前
|
存储
Leetcode第29题(两数相除)
LeetCode第29题要求使用不包含乘法、除法和mod运算符的方法计算两个整数的商,通过记录结果的正负,将问题转化为负数处理,并利用二进制幂次方的累加来逼近除数,最后根据结果的正负返回相应的商。
7 0
|
2月前
|
算法
LeetCode第2题两数相加
该文章介绍了 LeetCode 第 2 题两数相加的解法,通过同时遍历两个链表的头节点,创建新链表接收计算结果,时间复杂度为 O(n)。
LeetCode第2题两数相加
|
2月前
|
算法
LeetCode第29题两数相除
这篇文章介绍了LeetCode第29题"两数相除"的解题方法,通过使用加法、减法和二进制位移法代替常规的乘除操作,并考虑了整数溢出问题,提供了一种高效的算法解决方案。
LeetCode第29题两数相除
|
2月前
|
JavaScript 前端开发 PHP
leetcode——两数相加【二】
leetcode——两数相加【二】
30 0
|
4月前
LeetCode###445. 两数相加 II
LeetCode###445. 两数相加 II
27 2
|
5月前
|
存储 算法 Go
LeetCode第二题: 两数相加
 给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
LeetCode第二题: 两数相加
|
5月前
|
存储
【力扣】2. 两数相加、445. 两数相加Ⅱ
【力扣】2. 两数相加、445. 两数相加Ⅱ
|
5月前
|
存储
leetcode-2:两数相加
leetcode-2:两数相加
37 0
|
5月前
leetcode-29:两数相除
leetcode-29:两数相除
35 0
|
5月前
|
存储 算法
Leetcode算法系列| 2. 两数相加
Leetcode算法系列| 2. 两数相加