Js无分号代码风格注意事项(可能会导致力扣WA)

本文讲述了作者在解决链表相交问题时遇到的WA(Wrong Answer)情况,问题源于JavaScript代码风格。作者通常使用无分号代码风格,但在一行代码以括号或方括号开始时,漏掉了分号导致解析错误。通过逐步调试,作者发现并修正了这个问题,强调了细节在编程中的重要性。

前言

今天刷力扣的时候碰到一道题:链表相交,个人觉得我的思路明明是正确的,代码也没问题,却一直WA(能通过大部分测试用例)。

WA的代码如下:

const getListLen=(head)=>{
    let cur=head
    let num=0
    while(cur){
        num++
        cur=cur.next
    }
    return num
}


/**
 * @param {ListNode} headA
 * @param {ListNode} headB
 * @return {ListNode}
 */
var getIntersectionNode = function(headA, headB) {
    let curA = headA
    let curB = headB
    let numA=getListLen(headA)
    let numB=getListLen(headB)
    if(numA<numB){
        [curA,curB]=[curB,curA]
        [numA,numB]=[numB,numA]
    }
    let diff=numA-numB
    while(diff){
        curA=curA.next
        diff--
    }
    while(curA&&curB){
        if(curA===curB)return curA
        curA=curA.next
        curB=curB.next
    }
    return null
};

因为我平常使用VsCode的力扣插件刷题和调试,这道题插件里没有,我又没有会员不能在力扣调试,肉眼看了一会以后,还是觉得没问题,于是我开始一点一点注释,最终发现了问题所在。
正确的代码:

const getListLen=(head)=>{
    let cur=head
    let num=0
    while(cur){
        num++
        cur=cur.next
    }
    return num
}


/**
 * @param {ListNode} headA
 * @param {ListNode} headB
 * @return {ListNode}
 */
var getIntersectionNode = function(headA, headB) {
    let curA = headA
    let curB = headB
    let numA=getListLen(headA)
    let numB=getListLen(headB)
    if(numA<numB){
        [curA,curB]=[curB,curA]
        ;[numA,numB]=[numB,numA]
    }
    let diff=numA-numB
    while(diff){
        curA=curA.next
        diff--
    }
    while(curA&&curB){
        if(curA===curB)return curA
        curA=curA.next
        curB=curB.next
    }
    return null
};

WA的原因

不仔细看,你可能会问,这俩代码不就是一样的吗?(我相信仔细看你多半也看不出来)
问题就在这两行代码:

[curA,curB]=[curB,curA];
[numA,numB]=[numB,numA]

正确的代码第二行开头有一个分号,而我WA的代码没有。

Js无分号代码风格

实际上,采用无分号代码风格时,当一行代码是以:

  • (
  • [
  • `

开头的时候,需要在开头补上一个分号(! ~ &也可以),用以避免语法解析错误。

我平常一直都使用无分号的代码风格(懒),其实也知道无分号风格在某些情况下要在开头补一个分号,不过一直也没在意。

希望这次可以长教训。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值