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

简介: 字节跳动企业题库,链表系列,从出题频率最高刷到最低,题目有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;
    }
}
相关文章
|
30天前
|
算法
【C算法】链表算法
【C算法】链表算法
|
3月前
|
存储 算法 C语言
【数据结构与算法 刷题系列】合并两个有序链表
【数据结构与算法 刷题系列】合并两个有序链表
|
29天前
|
算法
【算法】合并两个有序链表(easy)——递归算法
【算法】合并两个有序链表(easy)——递归算法
【算法】合并两个有序链表(easy)——递归算法
|
24天前
|
存储 算法
【初阶数据结构篇】顺序表和链表算法题
此题可以先找到中间节点,然后把后半部分逆置,最近前后两部分一一比对,如果节点的值全部相同,则即为回文。
|
27天前
|
算法
【数据结构与算法】共享双向链表
【数据结构与算法】共享双向链表
10 0
|
27天前
|
算法
【数据结构与算法】双向链表
【数据结构与算法】双向链表
10 0
|
27天前
|
算法
【数据结构与算法】循环链表
【数据结构与算法】循环链表
10 0
|
27天前
|
存储 算法
【数据结构与算法】链表
【数据结构与算法】链表
15 0
|
1月前
|
算法 Java
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
40 0
|
1月前
|
存储 算法 Java
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
17 0