首页 > 解决方案 > 给定存储两个数字的数字的 LinkedList,将这些数字相加

问题描述

嗨,我正在尝试解决一些问题,但无法识别我的错误.. :(

问题描述:

给定两个代表两个非负整数的非空链表。这些数字以相反的顺序存储,并且它们的每个节点都包含一个数字。将两个数字相加并将总和作为链表返回。

您可以假设这两个数字不包含任何前导零,除了数字 0 本身。

示例

输入:l1 = [2,4,3],l2 = [5,6,4]

输出:[7,0,8]

解释:342 + 465 = 807。

我的代码:

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        
        String firstNumber = "";
        String secondNumber = "";
        
        // Converts the lists into strings
        while (l1 != null){
            
            firstNumber += Integer.toString(l1.val);
            l1 = l1.next;
            
        }
        
        while (l2 != null){
            
            secondNumber += Integer.toString(l2.val);
            l2 = l2.next;
            
        }
        
        // Reverses the strings
        firstNumber = new StringBuilder(firstNumber).reverse().toString();
        secondNumber = new StringBuilder(secondNumber).reverse().toString();
        
        long additionLong = Long.parseLong(firstNumber) + Long.parseLong(secondNumber);
    
        ListNode solutionList = new ListNode();
        ListNode prevNode = new ListNode();
        ListNode currentNode = solutionList;
        
        while (additionLong > 0){
            
            currentNode.val = (int) additionLong % 10;
            additionLong /= 10;
            
            ListNode nextNode = new ListNode();
            currentNode.next = nextNode;
            prevNode = currentNode;
            currentNode = currentNode.next;
            
        }
        
        prevNode.next = null;
            
        return solutionList;
            
    }
}

我无法通过以下测试,我似乎无法确定问题所在。

输入

l1 = [9]

l2 = [1,9,9,9,9,9,9,9,9,9]

我的输出

[8,0,0,0,0,0,0,0,0,0,1]

预期的

[0,0,0,0,0,0,0,0,0,0,1]

我怀疑麻烦的步骤是当我将两个反向字符串加在一起时,但代码确实通过了其他一些测试,所以我不知道为什么它不会通过这个..

另外,到目前为止,在我的学位课程中,我们只有两门非常基础的 Java 和 C 入门课程,而且我们只涵盖了基础知识,所以我们并没有真正学会如何很好地编写代码。如果我在代码中做了一些愚蠢的事情请让我知道,所以我知道要避免它。:)

标签: javamathlinked-list

解决方案


如果你有一把锤子,每个问题看起来都像钉子。

使用字符串是一样的。

而是展示一种更抽象的方法。

如果你有 67 [7, 6] 和 398 [8, 9, 3] 你会怎么加?

  1. 7+8 给 5 进位 1
  2. 6+9+进位 6 进位 1
  3. N/A+3+进位 4 进位 0
  4. N/A+N/A+随身携带 N/A

所以:

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    ListNode sum = null;
    ListNode last = null;

    int carry = 0;
    while (l1 != null || l2 != null) {
        int sum = carry;
        if (l1 != null) {
            sum += l1.value;
            l1 = l1.next;
        }
        if (l2 != null) {
            sum += l2.value;
            l2 = l2.next;
        }
        carry = 0;
        if (sum >= 10) {
            carry = 1;
            sum -= 10;
        }
        ListNode sumNode = ...
        ...
    }
    if (carry != 0) { // An extra digit.
        ...
    }
    return sum;
}

推荐阅读