美文网首页
两数相加 II

两数相加 II

作者: 程序员小2 | 来源:发表于2022-10-13 09:17 被阅读0次

题目

给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。

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

示例1:


image.png

输入:l1 = [7,2,4,3], l2 = [5,6,4]
输出:[7,8,0,7]
示例2:

输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[8,0,7]
示例3:

输入:l1 = [0], l2 = [0]
输出:[0]

提示:

链表的长度范围为 [1, 100]
0 <= node.val <= 9
输入数据保证链表代表的数字无前导 0

java代码:

/**
 * 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) {
        List<Integer> list1 = appendToList(l1);
        List<Integer> list2 = appendToList(l2);

        ListNode head = null;
        int carry = 0;
        ListNode tail = null;
        int len1 = list1.size() - 1;
        int len2 = list2.size() - 1;
        while (len1 >= 0 || len2 >= 0 || carry > 0) {
            int n1 = len1 >= 0 ? list1.get(len1) : 0;
            int n2 = len2 >= 0 ? list2.get(len2) : 0;
            int sum = n1 + n2 + carry;
            if (head == null) {
                head = tail = new ListNode(sum % 10);
            } else {
                tail.next = new ListNode(sum % 10);
                tail = tail.next;
            }

            carry = sum / 10;
            len1 --;
            len2--;
        }

        return reverse(head);

    }

    private ListNode reverse(ListNode head) {
        ListNode reverseHead = null;
        ListNode temp = head;
        ListNode pre = null;
        while(temp!=null) {
            ListNode next = temp.next;
            if(next ==null) {
                //到头了
                reverseHead = temp;
            }

            temp.next = pre;

            pre = temp;
            temp = next;
        }

        return reverseHead;
    }

    private List<Integer> appendToList(ListNode l1) {
        List<Integer> list = new ArrayList<Integer>();
        while (l1 != null) {
            list.add(l1.val);
            l1 = l1.next;
        }
        return list;
    }
}

相关文章

  • 两数相加 II(golang)

    原题:两数相加 II 使用栈,其它与两数相加(golang)类似

  • LeetCode-454-四数相加 II

    LeetCode-454-四数相加 II 454. 四数相加 II[https://leetcode-cn.com...

  • 两数相加 II

    题目: 题目的理解: 链表表示整数的每一位,获取出来组成一个整数。两个整数相加等到A。将A转成数组,倒序后存在链表...

  • 两数相加 II

    题目 给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相...

  • LeetCode 445. 两数相加 II

    445. 两数相加 II 题目来源:https://leetcode-cn.com/problems/add-tw...

  • Leetcode-454 四数相加 II

    454. 四数相加 II[https://leetcode-cn.com/problems/4sum-ii/] 解...

  • 两数相加(golang)

    原题: 两数相加 关联:两数相加 II(golang)从低位加起,注意进位,且最后进位完的链表可能比l1,l2中最...

  • 剑指 Offer II 025. 链表中的两数相加

    剑指 Offer II 025. 链表中的两数相加[https://leetcode-cn.com/problem...

  • LeetCode 445——两数相加 II

    1. 题目 2. 解答 2.1 方法一 在 LeetCode 206——反转链表 和 LeetCode 2——两数...

  • 445. 两数相加 II

    工程之美 什么样的工程是美的: 可维护 可读性 可扩展性 如果链表的长度不是特别恐怖的情况下, 这个栈的方案是非常...

网友评论

      本文标题:两数相加 II

      本文链接:https://www.haomeiwen.com/subject/htffzrtx.html