• 力扣 2. 两数相加


    Problem: 2. 两数相加

    思路与算法

    在这里插入图片描述

    Code

    
    /**
     * 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) {
            return add(l1, l2, 0);
        }
        public ListNode add(ListNode l1, ListNode l2, int bit) {
            if (l1 == null && l2 == null && bit == 0) {
                return null;
            }
            int val = bit;
            if (l1 != null) {
                val += l1.val;
                l1 = l1.next;
            }
            if (l2 != null) {
                val += l2.val;
                l2 = l2.next;
            }
            ListNode node = new ListNode(val % 10);
            node.next = add(l1, l2, val / 10);
            return node;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    复杂度分析

    • 时间复杂度:O(max(m,n)),其中 mmm 和 nnn
      分别为两个链表的长度。我们要遍历两个链表的全部位置,而处理每个位置只需要 O(1)的时间。

    • 空间复杂度:O(1)。注意返回值不计入空间复杂度。

    其他方法

    递归

    class Solution {
        public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
            return add(l1, l2, 0);
        }
    
        /**
            返回两个链表相加的头部
         */
        public ListNode add(ListNode l1, ListNode l2, int bit) {
            if (l1 == null && l2 == null && bit == 0) {
                return null;
            }
            int val = bit;
            if (l1 != null) {
                val += l1.val;
                l1 = l1.next;
            }
            if (l2 != null) {
                val += l2.val;
                l2 = l2.next;
            }
            ListNode node = new ListNode(val % 10);
            node.next = add(l1, l2, val / 10);
            return node;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
  • 相关阅读:
    6.流程控制
    SIP对讲求助终端sip解码广播终端
    lua脚本关键
    基于51单片机的数控可调稳压电源Proteus仿真
    typescript核心
    topic是什么
    蒙牛智慧牧场:最新鲜的牛奶来源于“数字牛”
    React 入门:使用脚手架创建应用
    杭电oj 2034 人见人爱A-B C语言
    餐饮机器人AB面:有人离场、有人挺进
  • 原文地址:https://blog.csdn.net/w710537643/article/details/134510204