0

リンクされたリストのデータ構造があり、deleteInfo() 関数をテストしています。ただし、リンクされたリストの最後のアイテムを削除しようとすると、エラーが発生します。リンクされたリストは上から挿入することで拡大するため、この場合の最後の項目は、実際には挿入された最初の項目です。

コードは次のとおりです。

public lList deleteInfo(String outInfo) {
        if ( info == outInfo ) {
            lList link = nextList().deleteInfo( outInfo );
            info = link.info;
            nextList = link.nextList();
        }
        else if ( nextList() != null )
            nextList().deleteInfo( outInfo );
        return this;
    }

public void insert(String in_Info) {
        if ( isEmpty() == false ) {
            lList entry = new lList(); // New entry is created to store new list
            entry.info = info; //Store the current list's information into this list
            entry.nextList = nextList;
            nextList = entry; //Next list now points to the entry created
        }

        info = in_Info;
    }

public lList nextList() {
        if ( isEmpty() == false )
            return nextList;
        return null;
    }

誰かが最後のリストを削除できるようにする方法を教えてもらえますか? 最後のリストには nextList がないため、null リストにアクセスしようとしている可能性があるため、最初の if ステートメントに問題があることはわかっています。しかし、私はこれを行う他の方法を知りません。どんな助けでも大歓迎です

4

3 に答える 3

1
public lList deleteInfo(String outInfo) {
        if ( nextList() != null && nextList().info == outInfo ) {
            lList link = nextList();

            nextList = link.nextList();
        }
        else if (nextList() != null){
            nextList().deleteInfo( outInfo );
        }
        return this;
    }
于 2013-05-20T15:28:09.000 に答える
0

これが最終的に私のために働いたものです:

//lList : deleteInfo()
//Pre: information to delete
//Post : List not containing information is returned
public lList deleteInfo(String outInfo) {
    if ( nextList() != null ) {
        lList link = nextList().deleteInfo( outInfo );
        if ( nextList().info == outInfo ) { //Handles information that is located at end of list
            nextList = link.nextList();
        }
        else if ( info == outInfo ){//Handles information that is located at beginning of list
            info = link.info;
            nextList = link.nextList();
        }
        else nextList().deleteInfo( outInfo );
    }
    return this;
}

リストが 1 つしかなく、そのリスト内の情報を削除しようとしている場合は機能しないことに注意してください。自分自身を逆参照できないので、それは良いことだと思います

于 2013-05-20T18:35:53.953 に答える
0

最後のものを削除するかどうかを確認する場合は、最初の if にインナーを追加することをお勧めします。

 public lList deleteInfo(String outInfo) {
        if ( info == outInfo ) {
         if( nextList() == null ) {
               //delete current list as u want
               return this;
         }
            lList link = nextList().deleteInfo( outInfo );
            info = link.info;
            nextList = link.nextList();
        }
        else if ( nextList() != null )
            nextList().deleteInfo( outInfo );
        return this;
    }
于 2013-05-20T15:27:38.213 に答える