两数相加

题目

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

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

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例 :

输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.
输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]
未命名2.png

代码:

public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    ListNode node = null;
    ListNode nodeNext = null;
    //  例  2+9=11  11/10=1  需要向前进位的值
    int prevValue = 0;
    while (l2 != null || l1 != null) {
        //l1的值
        int value1 = 0;
        //l2的值
        int value2 = 0;
        //当前节点和合
        int sum = 0;
        //如果当前l1为空赋值0否则赋值当前l1的值
        value1 = l1 == null ? 0 : l1.val;
        //同上
        value2 = l2 == null ? 0 : l2.val;
        //两数和再加上 上一节点进位值
        sum = value1 + value2 + prevValue;
        //为了得到下一节点向前进位的值
        prevValue = sum / 10;
        //下一节点得值
        int value = sum % 10;
         
        if (node == null) {
            node = nodeNext = new ListNode(value);
        } else {
            nodeNext.next = new ListNode(value);
            nodeNext = nodeNext.next;
        }
        if (l1 != null) {
            l1 = l1.next;
        }
        if (l2 != null) {
            l2 = l2.next;
        }
    }
    //当l1 和l2 都是最后一个是并且执行完     进位没有放到下一节点
    if (prevValue > 0) {
        nodeNext.next = new ListNode(prevValue);
    }
    return node;
}

你可能感兴趣的:(两数相加)