【算法社区】链表之两数相加

简介: 字节跳动企业题库,链表系列,从出题频率最高刷到最低,题目有2. 两数相加

image.png

前言:📫 作者简介:小明java问道之路,专注于研究计算机底层,就职于金融公司后端高级工程师,擅长交易领域的高安全/可用/并发/性能的设计和架构📫

🏆 Java领域优质创作者、阿里云专家博主、华为云享专家🏆

🔥 如果此文还不错的话,还请👍关注点赞收藏三连支持👍一下博主哦

本文导读

字节跳动企业题库,链表系列,因为有leetcode会员能看到企业出题频率,那我们从出题频率最高刷到最低,题目有2. 两数相加


2. 两数相加

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

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

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

这是所有大厂爱考的链表题目,对于熟悉链表的同学来说是秒杀的,我们用模拟法解题

【模拟法】图解:

image.png

代码详解,逐行注释:

publicListNodeaddTwoNumbers(ListNodel1, ListNodel2) { /*模拟法*/ListNodehead=null, tail=null;  // 初始化返回列表的哑结点intcarry=0;                      // 将进位carry初始化为0while (l1!=null||l2!=null) {  // 遍历列表l1和l2直至尾端intn1=l1!=null?l1.val : 0;
intn2=l2!=null?l2.val : 0;
intsum=n1+n2+carry;      // 设定sum// 创建一个数值为sum%10的新节点,并设置为当前节点的下一个节点,然后将当前节点进入到下一节点if (head==null) {
head=tail=newListNode(sum%10);
            } else {
tail.next=newListNode(sum%10);
tail=tail.next;
            }
carry=sum/10;   // 更新进位值,carry设置为sum的10位if (l1!=null) l1=l1.next; // 向前移动if (l2!=null) l2=l2.next;
        }
if (carry>0)          // 检查carry是否大于0,如果成立,则返回列表追加carrytail.next=newListNode(carry);
returnhead;
    }
}
相关文章
|
23天前
|
算法
【优选算法专栏】专题九:链表--------两两交换链表中的节点
【优选算法专栏】专题九:链表--------两两交换链表中的节点
17 0
|
2月前
|
算法
【数据结构与算法】题解 | #反转链表#
【数据结构与算法】题解 | #反转链表#
|
2月前
|
算法 索引
【数据结构与算法】5、循环链表、约瑟夫问题、静态链表
【数据结构与算法】5、循环链表、约瑟夫问题、静态链表
39 0
|
23天前
|
算法
算法系列--递归(一)--与链表有关(上)
算法系列--递归(一)--与链表有关
28 0
|
19天前
|
算法 数据可视化 数据挖掘
R语言社区主题检测算法应用案例
R语言社区主题检测算法应用案例
14 0
|
23天前
|
算法
算法系列--链表刷题(二)(下)
算法系列--链表刷题(二)(下)
17 0
|
23天前
|
算法
算法系列--链表刷题(二)(上)
算法系列--链表刷题(二)
19 0
|
23天前
|
算法
算法系列--递归(一)--与链表有关(下)
算法系列--递归(一)--与链表有关(下)
21 0
|
23天前
|
存储 算法
【优选算法专栏】专题九:链表--------两数之和
【优选算法专栏】专题九:链表--------两数之和
15 0
|
2月前
|
算法 Java 索引
[Java·算法·简单] LeetCode 141. 环形链表 详细解读
[Java·算法·简单] LeetCode 141. 环形链表 详细解读
23 0