割り当てのために両端キューを使用していますが、非常に単純なメソッドを通過した後にオブジェクト参照がノードから消えるという問題が発生しています。
いくつかの重要な定義:
class Node {
String s;
Node prev;
Node next;
...
}
class Sentinel extends Node {
Node prev;
Node next;
//Constructor uses that of Node
}
class Deque {
Sentinel start;
...
}
私たちが書いているメソッドの 1 つは、指定された文字列に基づいて両端キューから Node を削除します。
両端キューで:
public void removeSorted(String toRemove) {
// System.out.println(this.start);
// System.out.println(this.start.next);
this.start.next.removeSorted(toRemove);
}
コメントアウトされた println は、正しい Sentinel と Node を示しています。
次に、ノードで:
public void removeSorted(String toRemove) {
if (this.s.equals(toRemove)) {
// System.out.println(this.prev);
// System.out.println(this.prev.next);
this.prev.next = this.next;
this.next.prev = this.prev;
} else if (this.s.compareTo(toRemove) > 0) {
throw new RuntimeException("String does not exist in these nodes!");
} else {
this.next.removeSorted(toRemove);
}
}
this.prev
期待どおり、最初の再帰で Sentinel を出力するための println 。ただし、this.prev.next はノードの代わりに null を出力します。
この関数は、Sentinel の直後の最初のノードを削除しようとしたときにのみ失敗します。他のノードを削除しようとすると、正常に機能し、呼び出しを試みるとthis.prev.next
null 以外の応答が返されます。
関数を呼び出す直前に参照が存在することを示したのに、関数に渡すとき (直後) に参照が消えるのはなぜですか?