我是编码和学习链表问题的新手。我找到了一个解决方案,但并不真正理解它们的作用。(!node.next(是什么意思?它与node.next相同吗!=无效的
还有,我不明白这句话return(node.value>bigestValueInRest?node.value:biggestValueInRest(;
这是否意味着,如果node.value大于bigestValueInRest,那么node.value=bigestValue InRest?
这是的解决方案
function findMax(node) {
if (!node.next) {
return node.value;
} else {
const biggestValueInRest = findMax(node.next);
return (node.value > biggestValueInRest ? node.value
: biggestValueInRest);
}
}
在python中它会更简单,但你可以做的是创建一个看起来像这样的函数,稍后将解释
假设列表仅由数值组成
Function(ListItems) {
Let biggest_val = 0;
For (let i = 0; i < ListItems.length; i++) {
If (LisItems[i] > biggest_val) {
biggest_val = ListItems[i]
}
}
}
我们首先初始化一个变量来为我们保存列表的最大值,然后创建一个for循环来循环列表,并检查当前值是否大于我们当前的最大值。如果是,则更新我们最大值的值。
node.value>剩余值最大?node.value:bigestValueInRest被称为[turnary运算符][1]这是一个简短的if语句,但由于您才刚刚开始,因此最好使用传统的
[1]:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator
(!node.next(是什么意思?它与node.next相同吗!=无效的
!
是否定运算符,它否定放在它前面的值。
例如CCD_ 2与CCD_。
在这种情况下,如果node.next
是像false
、null
或undefined
这样的错误值,则!node.next
将返回true
。
在代码的if
语句中,如果没有链接到当前节点的下一个节点,它将返回该节点的值,因为在链表中,节点包含一个值和到下一节点的链接。
此外,我不理解这行返回(node.value>bigestValueInRest?node.value:biggestValueInRest(;
这是否意味着如果node.value大于bigestValueInRest,那么node.value=bigestValue InRest?
这是一个三元运算符,它就像一个返回值的缩短的if
。
return (node.value > biggestValueInRest ? node.value : biggestValueInRest);
将与相同
if (node.value > biggestValueInRest)
return node.value;
else
return biggestValueInRest;
三元运算符的语法基本上是:
"condition" ? "value to return if true" : "value to return if false"
并充分回答您的问题。
我找到了一个解决方案,但并不真正了解它们的作用。
提供的解决方案是递归的,它将为链表中的每个节点调用自己,直到到达最后一个节点(node.next
为空的节点(,一旦完成,它将从中返回每个比较的最大值。
递归函数并不总是一个好的实践,因为它们的时间复杂性可能会随着开发人员实现它的方式而增加
在这种情况下,它将是O(n(,这意味着它是线性的,这对于递归函数来说还不错。
这意味着完成该功能所需的时间与链表中n
项的数量成比例地受到影响。
因此,如果每个节点需要1,那么100个节点将是功能完成的100秒。