前言
今天刷力扣的时候碰到一道题:链表相交,个人觉得我的思路明明是正确的,代码也没问题,却一直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无分号代码风格
实际上,采用无分号代码风格时,当一行代码是以:
- (
- [
- `
开头的时候,需要在开头补上一个分号(! ~ &也可以),用以避免语法解析错误。
我平常一直都使用无分号的代码风格(懒),其实也知道无分号风格在某些情况下要在开头补一个分号,不过一直也没在意。
希望这次可以长教训。
本文讲述了作者在解决链表相交问题时遇到的WA(Wrong Answer)情况,问题源于JavaScript代码风格。作者通常使用无分号代码风格,但在一行代码以括号或方括号开始时,漏掉了分号导致解析错误。通过逐步调试,作者发现并修正了这个问题,强调了细节在编程中的重要性。

被折叠的 条评论
为什么被折叠?



