为什么要 return 一个已删除的项目?
Why to return a removed item?
我目前正在学习链表和双向链表。在这两个主题中,我不明白一件事。为什么我们要 return 在删除 head 或 tail 时删除的项目?例如,
// Create your .removeHead() method below:
removeHead() {
const removedHead = this.head;
if (!removedHead) {
return;
}
this.head = removedHead.getNextNode()
if (this.head) {
this.head.setPreviousNode(null)
}
if (removedHead === this.tail) {
this.removeTail();
}
return removedHead.data;
}
为什么return removedHead.data
?请帮助我理解。我只是不明白为什么通过 returning 项目,我们要删除它以及程序实际上如何在引擎盖下解释它?谢谢
因为 this.head 似乎有一个数据对象,其中可能包含有关已删除项目的信息,还可能包含有关删除是否成功的信息。通过返回它,调用例程获得它可能使用的信息 - 或者简单地忽略,因为不需要处理返回的值。
只需使用调试器并查看对象以了解其内容。
我对你的问题的理解是,你认为通过返回列表的头部,函数将它从列表中删除。事实并非如此。
首先尝试逐行阅读代码,并将一个假想链表的每个状态写在一张纸上。它将帮助您分析代码:
该函数首先获取现有的头部并将其保存在 removedHead 中。
然后它从当前头开始寻找列表中的下一个项目(下一个节点)。由于当前头部将被移除,因此下一个节点将成为新头部,并且该函数将这个新头部的前一个节点设置为空。头没有前一个节点(头是第一个节点,之前没有任何节点)。请注意,如果要移除的头部的下一个节点为null,则没有下一个节点,列表为空。
最后,如果删除的头是列表中的最后一个元素,则意味着头也是尾(一个元素的列表有1个头也是尾)。在这种情况下,我们还需要删除尾部,这会在代码的其他地方将尾部指针设置为 null。函数 removeTail() 实现了这一点。
作为最后一步,该函数会为您提供废弃磁头的数据。这不是必需的,如果删除最后一行代码,它不会影响其余代码。它作为一项附加功能存在,以备您需要对其进行操作时使用。
我目前正在学习链表和双向链表。在这两个主题中,我不明白一件事。为什么我们要 return 在删除 head 或 tail 时删除的项目?例如,
// Create your .removeHead() method below:
removeHead() {
const removedHead = this.head;
if (!removedHead) {
return;
}
this.head = removedHead.getNextNode()
if (this.head) {
this.head.setPreviousNode(null)
}
if (removedHead === this.tail) {
this.removeTail();
}
return removedHead.data;
}
为什么return removedHead.data
?请帮助我理解。我只是不明白为什么通过 returning 项目,我们要删除它以及程序实际上如何在引擎盖下解释它?谢谢
因为 this.head 似乎有一个数据对象,其中可能包含有关已删除项目的信息,还可能包含有关删除是否成功的信息。通过返回它,调用例程获得它可能使用的信息 - 或者简单地忽略,因为不需要处理返回的值。
只需使用调试器并查看对象以了解其内容。
我对你的问题的理解是,你认为通过返回列表的头部,函数将它从列表中删除。事实并非如此。
首先尝试逐行阅读代码,并将一个假想链表的每个状态写在一张纸上。它将帮助您分析代码:
该函数首先获取现有的头部并将其保存在 removedHead 中。
然后它从当前头开始寻找列表中的下一个项目(下一个节点)。由于当前头部将被移除,因此下一个节点将成为新头部,并且该函数将这个新头部的前一个节点设置为空。头没有前一个节点(头是第一个节点,之前没有任何节点)。请注意,如果要移除的头部的下一个节点为null,则没有下一个节点,列表为空。
最后,如果删除的头是列表中的最后一个元素,则意味着头也是尾(一个元素的列表有1个头也是尾)。在这种情况下,我们还需要删除尾部,这会在代码的其他地方将尾部指针设置为 null。函数 removeTail() 实现了这一点。
作为最后一步,该函数会为您提供废弃磁头的数据。这不是必需的,如果删除最后一行代码,它不会影响其余代码。它作为一项附加功能存在,以备您需要对其进行操作时使用。