LeetCode 百题攻略计划-两数相加

题目:两数相加

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 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
题目数据保证列表表示的数字不含前导零

类:

  • public class ListNode {
  • public int val;
  • public ListNode next;
  • public ListNode(int val=0, ListNode next=null) {
  • this.val = val;
  • this.next = next;
  • }
  • }

思路1:需考虑进位问题,数值满十进一。
思路1:需考虑参数长度问题,参数长度不足需补0
思路3:注意输出数组顺序



我的解法1:

public class Solution {
    public ListNode AddTwoNumbers(ListNode l1, ListNode l2) {
        ListNode list1=null, list2= null;
        int sum,k=0;
        while (l1!=null || l2!=null){
        l1 = l1 == null ? new ListNode():l1;
        l2 = l2 == null ? new ListNode() : l2;
        sum = l1.val + l2.val + k;
            if (sum >9){
                sum = sum % 10;
                k = 1;
            }
            else {
                k = 0;
            }
            if (list2 == null){
                list1 = list2 = new ListNode(sum);
            }
            else {
                list2.next = new ListNode(sum);
                list2 = list2.next;
            }
                l1 = l1.next;
                l2 = l2.next;
            }
            if (k > 0){
                list2.next = new ListNode(k);
            }
        return list1;
    }
}

我的解法2:

public class Solution {
    public ListNode AddTwoNumbers(ListNode l1, ListNode l2) {
    if (l1 == null)
    {
        return l2;
    }
    if (l2 == null)
    {
        return l1;
    }
    l2.val = l1.val + l2.val;
    if (l2.val > 9)
    {
        l2.val = l2.val % 10;
    if (l2.next != null)
    {
        l2.next.val = l2.next.val + 1;
    if (l2.next.val == 10)
    {
        l2.next = AddTwoNumbers(new ListNode(), l2.next);
    }
    }
    else
    {
        l2.next = new ListNode(1);
    }
    }
        l2.next = AddTwoNumbers(l1.next,l2.next);
        return l2;
    }
}