1

次の問題に遭遇しました。

そのノードへのアクセスのみが与えられた、単一リンク リストの途中にあるノードを削除します。(頭は与えられていません)現在、多くの解決策があり、削除する要素が最後のノードである場合、それらはすべて機能しません。

なぜこれがうまくいかないのですか?

public static void removeNode (Node n){
    if(n.next == null){ //n is the last node
        n= null;
        return;
    }
    //handling general case here
}
4

3 に答える 3

6

Java はパラメーターを値で渡すため、n を null に設定しても、メソッドの外部では効果がありません。これは、リストの最後のノードが渡されたときにメソッドが基本的に何もしないことを意味します。

于 2013-07-16T13:02:28.020 に答える
2

次のように、最後のノードを参照する変数ではなく、前のノードの参照を null に設定する必要があります。

if(n.next == null) {
    prev.next = null;
    return;
}
于 2013-07-16T13:01:27.077 に答える
1

nメソッドに対してローカルであるため、その値を変更してもリスト自体には影響しません。nextアクセス権がない前のノードのを変更する必要があります。

于 2013-07-16T13:04:06.027 に答える