力扣2两数相加(JavaScript)

目录

前言:

迭代法

伪代码:

递归法

JavaScript解法


前言:

JavaScript没有链表,启蒙题,难度中

迭代法

伪代码:

function(l1,l2)
//listnode的两个链表
total=0
next1=0
//初始化,total表示两链表相加的和,next1代表是否向下一位进1
result=ListNode()
//结果是链形式返回,result是结果集
cur=result
​
​
//这里相当于第一题中移动的那个指针
while(l1!=null and l2!=null())
total = l1.val+l2.val+next1
//next取个位数
cur.next=ListNode(total%10)
//next1取10位数
next1 =total/10
l1=l1.next
l2=l2.next
cur=cur.next
​
​
//是另一种情况还是与此同时另一端呢,上面是l1为空,那下面是l2位空
while l1!=null
total =l1.val+next1
cur.next=listNode(total%10)
next1=total/10
l1=l1.next
cur=cur.next
​
if next1!=0
//没结束,有个数没加进来
cur.next=ListNode(next1)
//合成了新链表
return result.next
//思考这里为什么返回next而不是result
​
​

 

递归法

 

伪代码

function(l1,l2)
total=l1.val+l2.val
next1=total/10
res=ListNode(total%10)
//满足3个中的一个继续执行
if(l1.next!=null 
or
l2.next!=0
or
next1 !=0)
//看起来要嵌套的样子
if(l1.next!=null  l1=l1.next)
else
li=ListNode(0)
​
if(l2.next!=null)
l2=l2.next
else:
l2=listNode(0)
//用0填充
l1.val=l1.val+next1
res.next=function(l1,l2)
return res
​
​

JavaScript解法

/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} l1
 * @param {ListNode} l2
 * @return {ListNode}
 */
var addTwoNumbers = function(l1, l2) {
    let dummy =new ListNode();//新建链表,有头部
    let curr =dummy;//指针,默认指向头部
    let carry =0;//储存进位的
    while(l1 !== null || l2!=null){
        // 只要两个链表有一个不为空,执行下面相加运算
        let sum =0;
        // 仍然分情况告诉计算机具体执行步骤
        if(l1!=null){
            sum+=l1.val;//和
            l1=l1.next//本链表的下一个节点存储,防止原地打转,第一个数加起来
        }
         if(l2!=null){
            sum+=l2.val;//和
            l2=l2.next//本链表的下一个节点存储,防止原地打转,第一个数加起来
        }
        // 每次都要处理进位carry
        sum +=carry;
        curr.next=new ListNode(sum%10);
        carry=Math.floor(sum/10);//JavaScript浮点数处理,
        curr=curr.next
        
    }
    if(carry>0){
         curr.next=new ListNode(carry)
    }
    return dummy.next
    //此时链表l1和l2的节点已经发生了变化
   
​
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白村第一深情

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值