我是javascript新手,正在尝试解决此问题:
您将获得两个非空链表,它们代表两个非负数 整数。这些数字以相反的顺序存储,每个数字 节点包含一个数字。将两个数字相加,然后将其返回为 链表。
这是我的解决办法:
addTwoNumbers = (l1, l2) => {
let carry = 0;
let p = curr = new ListNode(0);
while (l1 || l2) {
sum = 0;
if (l1 && l2) {
sum = l1.val + l2.val + carry;
} else if (l1) {
sum = l1.val + carry;
} else if (l2) {
sum = l2.val + carry;
}
carry = sum % 10;
sum = sum / 10;
curr.next = new ListNode(sum);
curr = curr.next;
}
return p.next
};
此处是LL的定义
class ListNode{
constructor(val){
this.val = val;
this.next = null;
}
}
进入无限循环。任何帮助表示赞赏。
答案 0 :(得分:1)
尝试以下代码:
addTwoNumbers = (l1, l2)=> {
let carry = 0;
var curr;
let p = (curr = new ListNode(0));
var sum = 0;
while (l1 || l2) {
if (l1 && l2) {
sum = l1.val + l2.val + carry;
l1=l1.next;
l2=l2.next;
} else if (l1) {
sum = l1.val + carry;
l1=l1.next;
} else if (l2) {
sum = l2.val + carry;
l2=l2.next;
}
carry = Math.floor(sum / 10);
sum = Math.floor(sum) % 10;
curr.next = new ListNode(sum);
curr = curr.next;
}
if(carry===1)
curr.next=new ListNode(carry);
return p.next;
};
注意事项:
curr
,然后再声明sum
。l1
和l2
参考。carry
和sum
,您应该注意/
和%
之间的区别,而且js中的number
与其他的不同强类型语言,例如java
。while
循环之后,我们需要一个附加的逻辑来处理左边的carry.