並べ替えられたリンク リストをバランスのとれた BST に変換するために Java でこのコードを見ていましたが、実装 #1 が機能しない理由を知りたいと思いました。ラッパーオブジェクトを作成して渡すと完全に機能しますが、ローカル参照を使用すると機能しないJavaの理由は何ですか? オブジェクトは引き続きヒープの右側に作成されます。
実装 #1
BinaryTree.Node sortedListToBST(MyList.Node w, int start, int end)
{
if (start > end) return null;
int mid = start + (end - start) / 2;
BinaryTree.Node left = sortedListToBST(w, start, mid-1);
BinaryTree.Node parent = new BinaryTree.Node(w.getVal());
w = w.getNext();
BinaryTree.Node right = sortedListToBST(w, mid+1, end);
parent.left = left;
parent.right =right;
return parent;
}
BinaryTree.Node sortedListToBST(MyList.Node head, int n) {
return sortedListToBST(head, 0, n-1);
}
実装 #2
BinaryTree.Node sortedListToBSTWrapper(Wrapper w, int start, int end)
{
if (start > end) return null;
int mid = start + (end - start) / 2;
BinaryTree.Node left = sortedListToBSTWrapper(w, start, mid-1);
BinaryTree.Node parent = new BinaryTree.Node(w.node.getVal());
w.node = w.node.getNext();
BinaryTree.Node right = sortedListToBSTWrapper(w, mid+1, end);
parent.left = left;
parent.right =right;
return parent;
}
BinaryTree.Node sortedListToBSTWrapper(MyList.Node head, int n) {
Wrapper w = new Wrapper();
w.node = head;
return sortedListToBSTWrapper(w, 0, n-1);
}