2014-01-29 3 views
0

В java Я знаю, что ссылки также передаются по значению. Единственный способ добиться этого - вернуть? Существуют ли другие альтернативы?Java: Передача по ссылке для изменяемых объектов в рекурсии

голова переменная класса

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

Другим вариантом является объект со ссылками на узел и собств внутри него, изменить этот объект от вызываемого метода и метода вызова будет видеть изменения.

2

Есть два варианта:

  • Вы возвращающие новую ссылку, как вы предложили
  • Вы завернуть ссылку на другую ссылку, так что вы можете обновить внутреннюю ссылку без проблем.

Простое решение будет массивом:

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

Я думаю, что вариант один будет лучше здесь, потому что реф-ссылка или массив будет только загромождать метод

+0

Спасибо за ответ. Поэтому, если я использую параметр 1 для возврата, ссылка должна быть переменной класса. В моем коде должна быть переменная класса? –

Смежные вопросы