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)就可以解决

相关文章
|
1月前
|
存储 算法 C++
LeetCode第二题(两数相加)
这篇文章是关于LeetCode上第二题“两数相加”的题解,其中详细描述了如何使用C++语言来实现将两个逆序存储的非负整数链表相加,并返回结果链表的算法。
27 0
LeetCode第二题(两数相加)
|
3月前
|
算法
LeetCode第29题两数相除
这篇文章介绍了LeetCode第29题"两数相除"的解题方法,通过使用加法、减法和二进制位移法代替常规的乘除操作,并考虑了整数溢出问题,提供了一种高效的算法解决方案。
LeetCode第29题两数相除
|
3月前
|
JavaScript 前端开发 PHP
leetcode——两数相加【二】
leetcode——两数相加【二】
32 0
|
5月前
LeetCode###445. 两数相加 II
LeetCode###445. 两数相加 II
29 2
|
6月前
|
存储 算法 Go
LeetCode第二题: 两数相加
 给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
LeetCode第二题: 两数相加
|
6月前
|
存储
【力扣】2. 两数相加、445. 两数相加Ⅱ
【力扣】2. 两数相加、445. 两数相加Ⅱ
|
6月前
|
存储
leetcode-2:两数相加
leetcode-2:两数相加
41 0
|
6月前
leetcode-258:各位相加
leetcode-258:各位相加
32 0
|
6月前
|
存储 算法
Leetcode算法系列| 2. 两数相加
Leetcode算法系列| 2. 两数相加