Javascript Leetcode添加两个数字Q:如何从数字创建linkedlist?
在这个问题中,我已经知道了如何获得数字的总和(即807),但现在我需要将该数字转换为一个链表(例如7->0->8) 如何从数字创建linkedlist 创建列表节点的类函数:Javascript Leetcode添加两个数字Q:如何从数字创建linkedlist?,javascript,algorithm,linked-list,Javascript,Algorithm,Linked List,在这个问题中,我已经知道了如何获得数字的总和(即807),但现在我需要将该数字转换为一个链表(例如7->0->8) 如何从数字创建linkedlist 创建列表节点的类函数: function ListNode(val) { this.val = val; this.next = null; } 我的代码的其余部分: var addTwoNumbers = function(l1, l2) { function findVal(linkedList) {
function ListNode(val) {
this.val = val;
this.next = null;
}
我的代码的其余部分:
var addTwoNumbers = function(l1, l2) {
function findVal(linkedList) {
return linkedList.next == null ? linkedList.val.toString() : linkedList.val.toString() + findVal(linkedList.next);
}
var l1num = parseInt(findVal(l1).split('').reverse().join(''));
var l2num = parseInt(findVal(l2).split('').reverse().join(''));
var sum = l1num + l2num;
// Create linked list from sum
如果将数字转换为数组,则可以使用
array.prototype.reduce
函数
let number=807;
函数列表节点(val){
this.val=val;
this.next=null;
}
//将数字转换为字符串并将其拆分为数字数组
设arr=Array.from(number.toString());
//迭代元素,并创建节点
让head=arr.reduce((下一个节点,当前)=>{
let node=新列表节点(curr);
node.next=nextNode;
返回节点;
},空);
//打印出数值
让节点=头部;
while(节点){
console.log(node.val);
node=node.next
}
如果将数字转换为数组,则可以使用array.prototype.reduce
功能
let number=807;
函数列表节点(val){
this.val=val;
this.next=null;
}
//将数字转换为字符串并将其拆分为数字数组
设arr=Array.from(number.toString());
//迭代元素,并创建节点
让head=arr.reduce((下一个节点,当前)=>{
let node=新列表节点(curr);
node.next=nextNode;
返回节点;
},空);
//打印出数值
让节点=头部;
while(节点){
console.log(node.val);
node=node.next
}
递归更容易:
f=n=>n?{val:n%10,next:f(n/10 | 0)}:null
console.log(f(807))
使用递归更容易:
f=n=>n?{val:n%10,next:f(n/10 | 0)}:null
log(f(807))
您真的不应该需要切片(1)
。只需传递null
作为初始值,并使用reduceRight
@user184994,几乎可以。LL的顺序应该是相反的。从一开始,然后是十,一百。。。因此,只要将reduceRight
更改回areduce
就可以了;)@Thomas噢,我没有注意到OP需要向后列出。@Bergi这在您最近编辑后不再有效-head
未定义。你需要调用newlistnode
而不是ListNode
@user184994哎哟,我不是要删除new
。感谢您的测试:-)您真的不应该需要切片(1)
。只需传递null
作为初始值,并使用reduceRight
@user184994,几乎可以。LL的顺序应该是相反的。从一开始,然后是十,一百。。。因此,只要将reduceRight
更改回areduce
就可以了;)@Thomas噢,我没有注意到OP需要向后列出。@Bergi这在您最近编辑后不再有效-head
未定义。你需要调用newlistnode
而不是ListNode
@user184994哎哟,我不是要删除new
。感谢您的测试:-)所有字母代表什么?f=n=>n
是函数f(n){return n}的缩写,我使用了a
和b
而不是l1
和l2
参数c
只是一个临时变量,用于在两位数字之和大于9时获取结转+1
。你可以看到关于n/10 | 0
如何工作的翻译版本?我只是安慰了一下807/10 | 0
,它给了我80
,但我不知道这是怎么回事worked@cryptofish123这是将浮点数转换为整数的快捷方式之一。很抱歉把代码弄得这么神秘。。我想要的是“Leet”代码:你能解释一下c>9
是如何工作的吗?在第三次迭代中c=10
。我假设您只想将1
带入下一个迭代?它是如何做到的?所有的字母代表什么?f=n=>n
是函数f(n){return n}
的缩写,我用a
和b
代替l1
和l2
参数c
只是一个临时变量,用于在两位数字之和大于9时获取结转+1
。你可以看到关于n/10 | 0
如何工作的翻译版本?我只是安慰了一下807/10 | 0
,它给了我80
,但我不知道这是怎么回事worked@cryptofish123这是将浮点数转换为整数的快捷方式之一。很抱歉把代码弄得这么神秘。。我想要的是“Leet”代码:你能解释一下c>9
是如何工作的吗?在第三次迭代中c=10
。我假设您只想将1
带入下一个迭代?它是如何做到这一点的?