两数相加

81 阅读1分钟

两数相加

说明

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

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

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

提示:

  • 每个链表中的节点数在范围 [1, 100] 内
  • 0 <= Node.val <= 9
  • 题目数据保证列表表示的数字不含前导零

来源:力扣(LeetCode) 链接:leetcode.cn/problems/ad…

题解

解法

import java.util.HashMap;

public class Demo {

    public static void main(String[] args) {
        ListNode l1 = new ListNode(0);
        ListNode l2 = new ListNode(0);
        ListNode demo = demo(l1, l2);
        while (demo!= null){
            System.out.print(demo.val+"\t");
            demo = demo.next;
        }
    }

    public static  ListNode demo(ListNode l1, ListNode l2){
        ListNode listNode = new ListNode(0);
        int number = 0;
        dg(l1,l2,listNode,number);
        return listNode;
    }

    public static ListNode dg(ListNode l1, ListNode l2,ListNode listNode,int number){
        if(l1 == null && l2 == null){
            if(number == 1){
                listNode.val = 1;
                return listNode;
            }
            return null;
        }
        int num = 0;
        if(l1 == null){
            num = l2.val + number;
            l2 = l2.next;
        }else if(l2 == null){
            num = l1.val + number;
            l1 = l1.next;
        }else{
            num = l1.val + l2.val + number;
            l1 = l1.next;
            l2 = l2.next;
        }
        number = 0;
        if(num >= 10){
            number = 1;
            listNode.val = num % 10;
        }else{
            listNode.val = num;
        }
        listNode.next = dg(l1,l2,new ListNode(),number);
        return listNode;
    }
}

class ListNode {
    int val;
    ListNode next;
    ListNode() {}
    ListNode(int val) { this.val = val; }
    ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}