Создание нового экземпляра ListNode - PullRequest
0 голосов
/ 13 апреля 2020

Проблема, которую я пытаюсь решить, это проблема LeetCode, но я застрял https://leetcode.com/problems/add-two-numbers/

Я пробовал следующее

import java.util.*;
class Solution {
    private ListNode l = new ListNode(0);
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {

        int pow = 0;
        int counter = 0;
        int sum1 = 0;
        int sum2 = 0;


        while(l1 != null && l2 != null)
        {
            sum1 = sum1 + ((int) (l1.val * (Math.pow(10,pow))));
            sum2 = sum2 + ((int) (l2.val * (Math.pow(10,pow))));
            pow++;
            l1 = l1.next;
            l2 = l2.next;
        }

        pow = pow - 1;

        int final_sum = sum1 + sum2;
        String number = String.valueOf(final_sum);
        char[] digits = number.toCharArray();


        l = l.next;
        ListNode x = new ListNode();
        x.val = (digits[2] - '0');
        l= x;
        addElement(digits[1] - '0');
        addElement(digits[0] - '0');

        return l;


    }

    public void addElement(int number)
    {
        ListNode x = new ListNode();
        x.val = number;  

        l.next = x;
    }
}

Однако, Я заметил, что это просто заменяет последнее значение ListNode x и не добавляет к ListNode l. Сначала я пытаюсь заставить его работать с одним экземпляром ListNode, не создавая несколько «ListNode x = new ListNode ()» с разными именами переменных.

В данный момент он просто возвращает [7,8], когда ему дано [2,4,3], и [5,6,4], когда он должен возвращаться [7,0,8]. Любые подсказки или советы помогут.

1 Ответ

0 голосов
/ 14 апреля 2020

Рей, не усложняйте, это всего лишь пример

начать с нулевого узла;

ListNode l3 = null;

определить rem и временный узел;

int rem = 0;
ListNode temp = l3;

итерирование обоих узлов;

while(l1 != null && l2 != null)      

суммирование значений,

int sum = l1.val + l2.val;

если temp равен нулю, вы в начале;

l3 = temp = new ListNode(sum%10);
rem = sum / 10;

если нет, вычислите следующее, продолжайте, если rem

sum += rem;
rem = sum / 10; 
temp.next = new ListNode(sum%10);

переместите темп

temp = temp.next;

и переместите источники,

l1 = l1.next;
l2 = l2.next;

когда вы закончите, продолжите, если rem снова

if (rem > 0) {
    temp.next = new ListNode(rem);
}

и возврат;

return l3;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...