Java:在递归中通过引用传递可变对象

时间:2014-01-29 09:27:35

标签: java recursion pass-by-reference mutable

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

有两种选择:

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

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

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

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