正在创建ListNode的新实例



我试图解决的问题是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(("。

目前,当给定[2,4,3]时,它只是返回[7,8],当它应该返回[7,0,8]时,返回[5,6,4]。任何提示或建议都会有所帮助。

Rey,不要让它变得复杂,这只是的一个例子

从一个null节点开始;

ListNode l3 = null;

定义rem和temp节点;

int rem = 0;
ListNode temp = l3;

对两个节点进行迭代;

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

vals求和,

int sum = l1.val + l2.val;

如果temp为null,则表示您处于开头;

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;

借助递归的解决方案

class solution{
int carry =0;
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
// create a base case where recursion terminates
if (l1 == null && l2 == null && carry == 0) {
return null;
}
// calculate sum of current node and get carry variable updated
int val1 = l1 == null ? 0 : l1.val;
int val2 = l2 == null ? 0 : l2.val;
int sum = val1 + val2 + carry;
carry = sum/10;
// update l1,l2 with next node if occur 
l1 = l1 == null ? null : l1.next;
l2 = l2 == null ? null : l2.next;
//perform recursion and store result in new Listnode and.

ListNode ans = new ListNode(sum%10, addTwoNumbers(l1, l2));

return ans;
}

相关内容

  • 没有找到相关文章

最新更新