0

リンクリストをインプレースで反転するJava関数を作成しています。私はJavaを初めて使用しますが、以下の関数のバグを正常にデバッグできません。IDEは、私が理解できないようなNullPointerExceptionを返します。どんな助けでも大歓迎です。

public listNode reverseLinkedList(listNode head)
{
    listNode reversedLinkedList = head;
    listNode temp = null;

    while (reversedLinkedList != null) {
        reversedLinkedList.setNext(temp);
        temp = reversedLinkedList;
        reversedLinkedList = reversedLinkedList.getNext();    
    }
    return reversedLinkedList;
}

テストのために、8つのリンクされたノードですでに初期化されたリンクリストがあります。上記の関数では、各ノード間で次のポインターを交換しreversedLinkedList、リンクリストに沿ってポインターを移動しようとしています。

編集:発生場所を特定するためにデバッガーを使用することを提案する人もいNullPointerExceptionます。私はすでにそれをしました。これは、ループreversedLinkedList = reversedLinkedList.getNext();の2回目の反復の行で発生します。while

テスト用に8つのポインターでリンクリストを初期化しました。ループはwhile、2番目のノードに移動する代わりに、代わりにnullポインターを参照します。一時変数と関係があるかもしれませんが、よくわかりません。

4

3 に答える 3

3

あなたの推論には欠陥があります。あなたが(最初のステップ)

reversedLinkedList.setNext(temp)

最初の参照をnull(これは正しい)に変更していますが、次のポインターへの参照はすべて失われています。2行後あなた

reversedLinkedList = reversedLinkedList.getNext();

tempnullだったので、reversedLinkedListnullになります。

一時変数を変更するに、一時変数への次のポインタを格納する必要があります。

しかし、これは例外を引き起こしていません。完全なコードと例外のスタックトレースを投稿してください

于 2011-11-15T09:05:44.143 に答える
1

私はあなたに提案します。

  • エラーメッセージを読んで、NullPointerExceptionが発生する正確な行を見つけます。
  • デバッガーを使用してコードをステップ実行し、変数がnullである理由を確認します。

nullポインター例外を生成する可能性のあるコードはここにはないので、間違った場所を探していると思います。推測するのではなく、上記の2つの手順に従うことをお勧めします。

于 2011-11-15T09:02:29.853 に答える
-1

問題は最後のノードにある可能性があります。次のノードはNULLであるため、取得できません。

 reversedLinkedList = reversedLinkedList.getNext();

でもわからない!

于 2011-11-15T09:02:38.193 に答える