给定一个未排序的链表,找到值最大的元素.(JavaScript)



我是编码和学习链表问题的新手。我找到了一个解决方案,但并不真正理解它们的作用。(!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是像falsenullundefined这样的错误值,则!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秒。

相关内容

  • 没有找到相关文章

最新更新