概述
JS的链表,必须先定义一个常量,再定义一个变量等于这个常量,然后变量=变量.next 才能指向next。
第一次用JS写链表,一直用let创建一个新的链表,然后输出一直为null,百度看了看别人写的,这才知道需要先定义一个常量的链表。
下面第一种是没考虑到js数最大为2 53次的情况,很简单的先相加算出总和再形成新的链表
/**
* Definition for singly-linked list.
* function ListNode(val) {
*
this.val = val;
*
this.next = null;
* }
*/
/**
* @param {ListNode} l1
* @param {ListNode} l2
* @return {ListNode}
*/
var addTwoNumbers = function(l1, l2) {
let a1=0;
let a1Length=1;
let a2=0;
let a2Length=1;
while(l1){
a1+=l1.val*a1Length;
a1Length*=10;
l1=l1.next;
}
while(l2){
a2+=l2.val*a2Length;
a2Length*=10;
l2=l2.next;
}
let all=a1+a2;
const list=new ListNode();
let back=list;
while(all>0){
back.val=(all%10);
all=parseInt(all/10);
if(all>0){
back.next=new ListNode();
back=back.next;
}
}
return list;
};
第二种是正确写法:
/**
* Definition for singly-linked list.
* function ListNode(val) {
*
this.val = val;
*
this.next = null;
* }
*/
/**
* @param {ListNode} l1
* @param {ListNode} l2
* @return {ListNode}
*/
var addTwoNumbers = function(l1, l2) {
const listNode = new ListNode(0);
let curNode = listNode;
while (l1 || l2) {
//如果l1 l2存在,就加上l1 l2对应的val值以及本来的val
const sum =(l1 && l1.val) + (l2 && l2.val) + curNode.val;
curNode.val = sum % 10;
//如果加起来大于10,进位1先赋值给next.val
curNode.next = new ListNode(sum > 9 ? 1 : 0);
//如果到链尾了,.next为空
if (!(l1 && l1.next) && !(l2 && l2.next) && sum < 10)
curNode.next = null;
curNode = curNode.next;
//不然不为空,指向.next
l1 = l1 && l1.next;
l2 = l2 && l2.next;
}
return listNode;
};
最后
以上就是开心煎蛋为你收集整理的JS 链表求和的全部内容,希望文章能够帮你解决JS 链表求和所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复