java - 以递归方法更新引用的值 - 最佳实践
问题描述
我试图了解如何以更好的方式更新 Java 方法中的引用变量。我知道 Java 引用是按值传递的 - 换句话说,如果我在方法中更改引用的值,它不会将它保留在调用方方法中。但与此同时,我也在尝试了解如何更好地处理这些情况。在大多数情况下,我们需要从递归方法中返回值,比如它的基本情况,就像下面我求助于维护一个静态变量来保存正在反转的链表的新头部一样。我可以在这里使用哪些更明智的选择?
public static LinkedList _head = null;
public static LinkedList reverseLinkedList(LinkedList head)
{
reverseLinkedListInternal( head );
return _head;
}
public static LinkedList reverseLinkedListInternal( LinkedList node )
{
if( node.next == null )
{
_head = node;
return node;
}
LinkedList tmp = reverseLinkedListInternal( node.next );
tmp.next = node;
node.next = null;
return node;
}
解决方案
您只是不需要这里的静态变量。您应该只使用返回值,而目前它只是被忽略了。
这是我要写的那种解决方案。显然,这可能不属于您的练习的限制,因为它被写成好像它是 a 的方法LinkedList
,这在现实世界中会更有意义。然而,这个概念是相同的,所以希望它能帮助你发现你的错误。
public void reverse() {
reverseInternal(head);
}
public Node reverseInternal(Node node) {
if (node.next == null) {
return node;
}
Node reversedTail = reverseInternal(node.next);
reversedTail.next = node;
node.next = null;
return reversedTail;
}
推荐阅读
- javascript - 保存简单的 Http 身份验证凭据以供以后使用
- algorithm - C语言原始数据的高速压缩
- .net - 运算符“&&”不能应用于 tst 文件中“方法组”类型的操作数
- javascript - 需要帮助打印 asp.net 图像对象的 2 个 eval 函数
- npm - 如何 npm 审计全局包
- pandas - Pandas 协方差返回零
- python-3.x - Pyinstaller 包含文件夹
- jpa - 如何防止一次加载完整的数据库递归树?
- ubuntu-16.04 - 如何通过终端在 ubuntu 16.04 上运行 .x86_64 文件?
- reactjs - 如何设置 React Fiber 的“类型”?