首页 > 其他分享 >力扣2. 两数相加

力扣2. 两数相加

时间:2023-05-23 10:55:55浏览次数:30  
标签:p2 链表 p1 ListNode 相加 nullptr next 力扣

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

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

你可以假设除了数字 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]

 

链表版大数相加,出题人已经将链表逆序存储,降低了难度,我们顺序计算即可。虽然使用尾插法,但也要留个头结点做输出。

 

 1 /**
 2  * Definition for singly-linked list.
 3  * struct ListNode {
 4  *     int val;
 5  *     ListNode *next;
 6  *     ListNode() : val(0), next(nullptr) {}
 7  *     ListNode(int x) : val(x), next(nullptr) {}
 8  *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 9  * };
10  */
11 class Solution {
12 public:
13     ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
14         ListNode *p1=l1;
15         ListNode *p2=l2;
16         ListNode *tail=new ListNode(); //,tail是结果链表的尾结点
17         ListNode *head=tail; //结果链表的头结点
18         while(p1!=nullptr){
19             int temp=p1->val;
20             if (p2!=nullptr){
21                 temp+=p2->val;
22             }
23             //检测是否存在进位
24             if (temp>9&&p1->next==nullptr){
25                 p1->next=new ListNode(1);
26             }else if (temp>9&&p1->next!=nullptr){
27                 p1->next->val+=1;
28             }
29             //采用尾插法创建结果链表
30             ListNode *now=new ListNode(temp%10);
31             tail->next=now;
32             tail=now;
33             //更新节点
34             if (p1!=nullptr)
35                 p1=p1->next;
36             if (p2!=nullptr)
37                 p2=p2->next;
38         }
39         if (p2!=nullptr){  //若l2更长,则直接把l2剩下的部分链接到结果链表
40             tail->next=p2;
41         }
42         return head->next;
43     }
44 };

 

标签:p2,链表,p1,ListNode,相加,nullptr,next,力扣
From: https://www.cnblogs.com/coderhrz/p/17422657.html

相关文章

  • 力扣---1161. 最大层内元素和
    给你一个二叉树的根节点 root。设根节点位于二叉树的第1层,而根节点的子节点位于第2层,依此类推。请返回层内元素之和最大的那几层(可能只有一层)的层号,并返回其中 最小的那个。 示例1:输入:root=[1,7,0,7,-8,null,null]输出:2解释:第1层各元素之和为1,第2层各元素......
  • 力扣---1080. 根到叶路径上的不足节点
    给你二叉树的根节点root和一个整数limit,请你同时删除树中所有不足节点,并返回最终二叉树的根节点。假如通过节点node的每种可能的“根-叶”路径上值的总和全都小于给定的limit,则该节点被称之为不足节点,需要被删除。叶子节点,就是没有子节点的节点。 示例1:输入:r......
  • 力扣---236. 二叉树的最近公共祖先
    给定一个二叉树,找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树T的两个节点p、q,最近公共祖先表示为一个节点x,满足x是p、q的祖先且x的深度尽可能大(一个节点也可以是它自己的祖先)。” 示例1:输入:root=[3,5,1,6,2,0,8,null,n......
  • 力扣---1372. 二叉树中的最长交错路径
    给你一棵以 root 为根的二叉树,二叉树中的交错路径定义如下:选择二叉树中任意 节点和一个方向(左或者右)。如果前进方向为右,那么移动到当前节点的的右子节点,否则移动到它的左子节点。改变前进方向:左变右或者右变左。重复第二步和第三步,直到你在树中无法继续移动。交错路径的长度......
  • 力扣 72. 编辑距离
    72.编辑距离给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数  。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入:word1="horse",word2="ros"输出:3解释:horse->rorse(将'h'......
  • 代码随想录算法训练营第七天|454. 四数相加 II、383. 赎金信、15. 三数之和、18. 四数
    【参考链接】454.四数相加II【注意】1.a+b作为key,出现次数作为value,0-(c+d)有没有在map集合里出现过,出现的次数做统计。遍历两个数组时间复杂度为O(n2)。【代码】1classSolution(object):2deffourSumCount(self,nums1,nums2,nums3,nums4):3"""......
  • 代码随想录算法训练营第7天 | ● 454.四数相加II ● 383. 赎金信 ● 15. 三数之和
     第三章 哈希表part02  今日任务  ●  454.四数相加II ●  383. 赎金信 ●  15. 三数之和 ●  18. 四数之和 ●  总结    详细布置   454.四数相加II  建议:本题是 使用map 巧妙解决的问题,好好体会一下 哈希法 如何提高程序......
  • 力扣---1448. 统计二叉树中好节点的数目
    给你一棵根为 root 的二叉树,请你返回二叉树中好节点的数目。「好节点」X定义为:从根到该节点X所经过的节点中,没有任何节点的值大于X的值。 示例1:输入:root=[3,1,4,3,null,1,5]输出:4解释:图中蓝色节点为好节点。根节点(3)永远是个好节点。节点4->(3,4)是路径中......
  • 力扣---872. 叶子相似的树
    请考虑一棵二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列。 举个例子,如上图所示,给定一棵叶值序列为 (6,7,4,9,8) 的树。如果有两棵二叉树的叶值序列是相同,那么我们就认为它们是 叶相似 的。如果给定的两个根结点分别为 root1和 root2......
  • 力扣---104. 二叉树的最大深度
    给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树[3,9,20,null,null,15,7],3/\920/\157返回它的最大深度 3。来源:力扣(LeetCode)链接:https://leetcode......