繁体   English   中英

以递归方法更新引用的值 - 最佳实践

[英]Update value of a reference in recursive method - best practices

我试图了解如何以更好的方式更新 Java 方法中的引用变量。 我知道 Java 引用是按值传递的 - 换句话说,如果我在方法中更改引用的值,它不会在调用者方法中保留它。 但与此同时,我也在尝试了解如何更好地处理这些情况。 在大多数情况下,我们需要从递归方法中返回值,比如它的基本情况,就像下面我求助于维护一个 static 变量来保存正在反转的链表的新头。 我可以在这里使用哪些更明智的选择?

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;
    }

您在这里不需要 static 变量。 您应该只使用返回值,而目前它只是被忽略了。

这是我要写的那种解决方案。 显然,这可能不属于您的练习的限制,因为它就像是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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM