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

相关文章
|
3月前
|
算法
LeetCode第2题两数相加
该文章介绍了 LeetCode 第 2 题两数相加的解法,通过同时遍历两个链表的头节点,创建新链表接收计算结果,时间复杂度为 O(n)。
LeetCode第2题两数相加
|
3月前
|
JavaScript 前端开发 PHP
leetcode——两数相加【二】
leetcode——两数相加【二】
32 0
|
5月前
LeetCode###445. 两数相加 II
LeetCode###445. 两数相加 II
29 2
|
6月前
|
存储 算法 Go
LeetCode第二题: 两数相加
 给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
LeetCode第二题: 两数相加
|
6月前
|
存储
leetcode-2:两数相加
leetcode-2:两数相加
41 0
|
6月前
leetcode-29:两数相除
leetcode-29:两数相除
39 0
|
6月前
|
存储 算法
Leetcode算法系列| 2. 两数相加
Leetcode算法系列| 2. 两数相加
|
存储 算法
LeetCode2-两数相加
LeetCode2-两数相加