【问题标题】:Java: Pass by reference for mutable objects in recursionJava:通过引用传递递归中的可变对象
【发布时间】:2014-01-29 09:27:35
【问题描述】:

在 java 中,我知道引用也是按值传递的。让这个工作的唯一方法是返回 prev 吗?还有其他选择吗?

head 是类变量

convertTreeToSortedDoublyLinkedList(root, null);
private void convertTreeToSortedDoublyLinkedList(Node node, Node prev) {
        if(node == null){
            return;
        }

        convertTreeToSortedDoublyLinkedList(node.left, prev);

        node.left = prev;
        if(prev != null) {
            prev.right = node;          
        } else {
            head = node;            
        }

          Node right = node.right;
          head.left = node;
          node.right = head;
          prev = node;

        convertTreeToSortedDoublyLinkedList(right, prev);   
    }

【问题讨论】:

    标签: java recursion pass-by-reference mutable


    【解决方案1】:

    另一种选择是拥有一个对象,其中包含对 node 和 priv 的引用,从被调用方法修改该对象,调用方法将看到更改。

    【讨论】:

      【解决方案2】:

      有两种选择:

      • 您按照建议返回新参考
      • 您将引用包装在另一个引用中,这样您就可以毫无问题地更新内部引用。

      一个简单的解决方案是一个数组:

      Node[] ref = new Node[1] {prev};
      ref[0] = //update here
      

      我认为选项一在这里会更好,因为 Ref-Ref 或数组只会使方法混乱

      【讨论】:

      • 感谢您的回复。因此,如果我使用选项 1 返回引用应该是一个类变量。在我的代码中 prev 应该是一个类变量?
      猜你喜欢
      • 2011-12-12
      • 2011-05-02
      • 1970-01-01
      • 1970-01-01
      • 2012-10-10
      • 2017-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多