単方向リストを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();
}
}
ここまではできたのですが、どうしても最後のノード削除ができません。
どうしたらいいでしょうか。
No.2ベストアンサー
- 回答日時:
このソースで何とかするなら以下のような感じでしょうか。
void deleteTail(){ //最後のノードを削除
____MyList tmp = this;
____MyList lastList = null;
____while(tmp.next != null){
________lastList = tmp;
________tmp = tmp.next;
____}
____lastList.next = null;
}
No.1
- 回答日時:
元々Cをされていた方でしょうか。
void deleteTail(){ //最後のノードを削除
____MyList tmp = this;
____while(tmp.next != null){
________tmp = tmp.next;
____}
____tmp = null;
}
このメソッドの最後の tmp = null; の部分ですが、
これはローカル変数のtmpの参照先をnullにしただけです。
単純に考えて「最後のノードが削除される」ということは、
最後の1つ前のノードから最後のノードへの参照がnullになるということなので
最後の1つ前のノードのnextにnullを入れてあげれば良いと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- Visual Basic(VBA) userformでSheetを選択して開くコード 1 2023/05/15 16:27
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- PHP style.cssのjQuery条件付きcssが機能しない 4 2022/07/17 18:27
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- その他(プログラミング・Web制作) pythonにおける単方向リストの実装について 4 2022/07/13 12:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラミングの問題です。大...
-
Googleログインボタンのデザイ...
-
jdk17.06のインストーラーが起...
-
正規表現について質問です。 カ...
-
JDONWROADER2のエラー修復
-
googleスプレッドシートのGASに...
-
jdbcでinsert,delete,createをe...
-
Verilogについて質問です。この...
-
eclipse実行ができない
-
eclipseで作ったプログラムを他...
-
「main メソッドを持つクラスが...
-
スプレッドシートからリマイン...
-
googleスプレッドシートのスク...
-
論理回路設計をVerilogで行う問...
-
ゲーム開発の入門書を探しています
-
session,requestはjspで未定義...
-
サーブレットをapacheで公開す...
-
下記のリストならno002が含まれ...
-
is this even a thing?
-
JAの支部?地域の農協のカード...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
iText セル内での自動改行について
-
アコーディオンメニューにする...
-
Aタグのhrefの値を取得したいの...
-
こんばんは。 メガメニューを今...
-
jtreeのノードを右クリックで選...
-
或る文字列の文字数が一定数以...
-
jQueryについて
-
javaがわかりません。。。
-
鍵盤アプリで、スマホの画面に...
-
URL+URN=URI と習ったのですが...
-
Listでintの最大値を超える要素...
-
ノードの削除2
-
Preorder Tree Walkとは
-
innerTextは標準化されているの...
-
JTextAreaを改行コードを直接書...
-
(再質問)エクセルのマクロボ...
-
collection型を引数にしたファ...
-
コンソール画面のクリアの方法
-
mとnを入力 mからnまでを加算し...
-
Google SketchUpのポータブル版...
おすすめ情報
