LeetCode第2题两数相加

简介: 该文章介绍了 LeetCode 第 2 题两数相加的解法,通过同时遍历两个链表的头节点,创建新链表接收计算结果,时间复杂度为 O(n)。

继续打卡算法题,今天学习的是第LeetCode的第2题两数相加,这道题目是道中等题。

image.png

分析一波题目

单链表,都需要从头开始遍历,我们可以同时开始遍历两个头节点,创建一个新链表接收新数字,把每位计算的值记录到新的节点,有进位需要保存下来,给下一个节点使用。

同时在使用新链表的时候,一般会使用一个虚拟节点指向头节点,这样可以方便找到头节点。

编码解决

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
   
   
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
   
   

        if (l1 == null) {
   
   
            return l2;
        }
        if(l2 == null) {
   
   
            return l1;
        }
        ListNode dumy = new ListNode(-1);
        int bit = 0;
        ListNode last = dumy;
        while(l1 !=null || l2!=null || bit > 0) {
   
   
            int v1 = l1 == null ? 0 : l1.val;
            int v2 =  l2==null ? 0: l2.val;
            ListNode l3 = new ListNode(-1);
            //有进位的情况
            if((v1 + v2 + bit) >= 10) {
   
   
                l3 = new ListNode((v1 + v2 + bit) % 10);
                //进位存下来
                bit = (v1 + v2 + bit) / 10;
            } else {
   
   

                l3 = new ListNode(v1 + v2 + bit);
                bit = 0;
            }
            l1 =  l1 == null ? null : l1.next;
            l2 = l2 == null ? null : l2.next;
            last.next = l3;
            last = l3;
        }

        return dumy.next;
    }
}

总结

这个题目就是简单的遍历节点,然后直接相加就可以,时间复杂度O(n)就可以解决

相关文章
|
2月前
|
存储 算法 C++
LeetCode第二题(两数相加)
这篇文章是关于LeetCode上第二题“两数相加”的题解,其中详细描述了如何使用C++语言来实现将两个逆序存储的非负整数链表相加,并返回结果链表的算法。
34 0
LeetCode第二题(两数相加)
|
2月前
|
存储
Leetcode第29题(两数相除)
LeetCode第29题要求使用不包含乘法、除法和mod运算符的方法计算两个整数的商,通过记录结果的正负,将问题转化为负数处理,并利用二进制幂次方的累加来逼近除数,最后根据结果的正负返回相应的商。
18 0
|
4月前
|
算法
LeetCode第29题两数相除
这篇文章介绍了LeetCode第29题"两数相除"的解题方法,通过使用加法、减法和二进制位移法代替常规的乘除操作,并考虑了整数溢出问题,提供了一种高效的算法解决方案。
LeetCode第29题两数相除
|
4月前
|
JavaScript 前端开发 PHP
leetcode——两数相加【二】
leetcode——两数相加【二】
36 0
|
6月前
LeetCode###445. 两数相加 II
LeetCode###445. 两数相加 II
31 2
|
7月前
|
存储 算法 Go
LeetCode第二题: 两数相加
 给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
LeetCode第二题: 两数相加
|
7月前
|
存储
leetcode-2:两数相加
leetcode-2:两数相加
45 0
|
7月前
|
存储 算法
Leetcode算法系列| 2. 两数相加
Leetcode算法系列| 2. 两数相加
|
存储 算法
LeetCode2-两数相加
LeetCode2-两数相加

热门文章

最新文章