首页 > 其他分享 >两数相加

两数相加

时间:2024-12-21 14:31:33浏览次数:3  
标签:ListNode val int 相加 next l1 sum

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

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

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

示例 1:

输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.

示例 2:

输入:l1 = [0], l2 = [0]
输出:[0]

示例 3:

输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]

 

/**
 * Definition for singly-linked list.
 * 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 *p = l1;
        ListNode *q = l2;
        int c =0;
        //记录l1的前驱,以便将结果放在l1链表上
        ListNode *pre;
        while(p&&q){
            int sum  = p->val+q->val+c;
            p->val = sum%10;
            c = sum/10;
            pre  =p;
            p = p->next;
            q = q->next;
        }
        while(p){
            int sum = p->val +c;
            p->val = sum%10;
            c = sum/10;
            pre  =p;
            p = p->next;
        }
        while(q){
            int sum = q->val +c;
            ListNode *r = new ListNode(sum%10);
            c = sum/10;
            pre->next = r;
            pre = r;
            q = q->next;
        }
        if(c!=0){
            ListNode *r = new ListNode(c);
            pre->next = r;
        }
        return l1;
    }
};

 

标签:ListNode,val,int,相加,next,l1,sum
From: https://www.cnblogs.com/yueshengd/p/18620732

相关文章

  • 两数相加——链表
    题目链接思路链表的方式,模拟加法的计算过程,用一个变量保存进位信息即可。代码classSolution{public:ListNode*addTwoNumbers(ListNode*l1,ListNode*l2){//有一种办法可以节省空间,直接将结果放在l1或者l2上//但是这样就改变了原来的......
  • 写一个算法找到数组中两个元素相加等于指定数的所有组合
    在前端开发中,我们可以使用JavaScript来实现一个算法,该算法能够找到数组中两个元素相加等于指定数的所有组合。下面是一个示例代码:/***找到数组中两个元素相加等于指定数的所有组合*@param{number[]}nums-输入数组*@param{number}target-目标和*@returns{A......
  • 2024/12/7【哈希表】 LeetCode453 四数相加II ,知识点:defaultdict,lambda函数,dict的get
    454.四数相加II-力扣(LeetCode)代码随想录(programmercarl.com)本题解题步骤:首先定义一个unordered_map(在python中为字典),key放a和b两数之和,value放a和b两数之和出现的次数。遍历大A和大B数组,统计两个数组元素之和,和出现的次数,放到map中。定义int变量count,用来统计a+b+......
  • leetcode 258. 各位相加。数学
    258.各位相加给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。返回这个结果。其中0≤num≤2^31-1法一:迭代classSolution{public:intaddDigits(intnum){while(num>=10){//判断千万别写成num<10intsum=0;......
  • 力扣2.两数相加
    链表两数相加的问题与数组里面大数相加的问题一样。思路:我们从头开始遍历两个链表,当两个链表都没有到头时,我们正常将该节点的值进行相加,并且建立新的节点来保存当前位的值,加入到前面结果的结尾,同时保存进位的值;若当前任意一个链表没有到达末尾,我们应该继续运算,在运算时把已经......
  • LeetCode2 两数相加
    LeetCode2两数相加题目链接:LeetCode2描述给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字0之外,这两个数都不会以0开头。示......
  • 代码随想录:四数相加 II
    代码随想录:四数相加II我还以为会有更快的速度呢。。没想到最佳答案就是n^2不过值得一提的,这题一开始可能会想到用multiset来解决重复出现的元素,但实际上,multiset的查询速度是logn,是不如用哈希表的,所以用unordered_map,用键值对的值来表示元素出现的次数。classSolution{publ......
  • 链表【两数相加】具体思路——【递归】【迭代】【暴力】(附完整代码)
    文章目录前言一、问题引入,如何理解【链表】两数相加?二、方法一(固定数组暴力)三、方法二(递归法)四、方法三(迭代法)前言本文将介绍【链表】两数相加对于这一问题将采用多种思路方法来解决【暴力】【递归法】【迭代法】一、问题引入,如何理解【链表】两数相加?题目链接......
  • C语言 | Leetcode C语言题解之第445题两数相加II
    题目:题解:structListNode*addTwoNumbers(structListNode*l1,structListNode*l2){intstack1[100];intstack2[100];inttop1=0;inttop2=0;intcarry=0;intsum=0;structListNode*temp=NULL;structListNode*he......
  • C++ | Leetcode C++题解之第445题两数相加II
    题目:题解:classSolution{public:ListNode*addTwoNumbers(ListNode*l1,ListNode*l2){stack<int>s1,s2;while(l1){s1.push(l1->val);l1=l1->next;}while(l2){......