※ ChatGPTを利用し、要約された質問です(原文:javaがわかりません。。。)
Javaで単方向リストを実装する方法と最後のノード削除について
このQ&Aのポイント
Javaで単方向リストを実装する方法と、リストの最後のノードを削除する方法について解説します。
MyListクラスとMyListAppクラスを使用して、リストの先頭、最後、途中に新しいデータを追加したり、データを削除したりする方法を説明します。
最後のノードを削除する方法がうまく動作しない場合は、deleteTailメソッドの実装に問題がある可能性があります。実装を確認し、修正することが必要です。
単方向リストをjavaで書きなさい。
MyListクラス メソッドを実装
MyListAppクラス メソッドを実行
MyListに実装するメソッド
void insertTail(MyList node):リストの最後へ新規データを追加
void insertHead(MyList node):リストの先頭へ新しいデータを追加
void show():現在のリストを表示する
void insert(MyList node):リストの途中へ新規データを挿入
※データが小さい順に並んでいるとして、新規データも小さい順になるような場所へ挿入できるようにする。
void delete(MyList node):リストからデータを1つ削除
※指定されたデータを見つけ、最初に見つかったデータを削除できるしょうにする。見つからないときは、何もしない。
void deleteHead():先頭のノードを削除する
void deleteTail():最後のノードを削除する
という問題を解いています。
class MyList{
int data; //データ
MyList next = null; //次のノードへのポインタ
MyList(int data){ //新しいノードの作成
this.data = data;
}
void insertTail(MyList node){ //リストの最後へ追加
MyList tmp = this;
while(tmp.next != null){
tmp = tmp.next;
}
tmp.next = node;
}
void insertHead(MyList node){ //リストの先頭へ追加
node.next = this.next;
this.next = node;
}
void insert(int head, MyList node){ //リストの途中へ新規データを挿入
MyList tmp = this;
while(tmp != null){
if(tmp.data == head){
break;
}
tmp = tmp.next;
}
node.next = tmp.next;
tmp.next = node;
}
void delete(int here, MyList node){ //リストからデータを1つ削除
MyList tmp = this;
while(tmp != null){
if(tmp.data == here){
break;
}
tmp = tmp.next;
}
node = tmp.next;
tmp.next = node.next;
node.next = null;
}
void deleteHead(){ //先頭のノードを削除
MyList tmp = next;
this.next = tmp.next;
tmp.next = null;
}
void deleteTail(){ //最後のノードを削除
MyList tmp = this;
while(tmp.next != null){
tmp = tmp.next;
}
tmp = null;
}
void show(){
MyList tmp = next;
while(true){
System.out.print(tmp.data);
if(tmp.next == null)
break;
tmp = tmp.next;
}
System.out.println("");
}
}
class MyListApp{
public static void main(String[] args){
MyList list = new MyList(0); //初期ダミー
System.out.println("最後に追加");
list.insertTail(new MyList(1)); //最後に追加
list.show();
list.insertTail(new MyList(5));
list.show();
System.out.println();
System.out.println("先頭に追加");
list.insertHead(new MyList(8)); //先頭に追加
list.show();
list.insertHead(new MyList(9));
list.show();
System.out.println();
System.out.println("途中からデータを追加");
list.insert(1, new MyList(2)); //途中からデータの追加
list.show();
list.insert(2, new MyList(3));
list.show();
System.out.println();
System.out.println("リストからデータを削除");
list.delete(8, new MyList(1)); //リストからデータを削除
list.show();
System.out.println();
System.out.println("先頭のノードを削除");
list.deleteHead(); //先頭のノードを削除
list.show();
list.deleteHead();
list.show();
System.out.println();
System.out.println("最後のノードを削除");
list.deleteTail(); //最後のノードを削除
list.show();
list.deleteTail();
list.show();
}
}
ここまではできたのですが、どうしても最後のノード削除ができません。
どうしたらいいでしょうか。
お礼
ありがとうございます。 すごく助かりました。。