前提・実現したいこと
連結リストにおいて、先頭に指定要素追加していきたいのですが、先頭に追加する最後のメソッドになるとnullとして追加?されてしまいます。
リンクの付け替えにおいて何か問題があるのだろうと考えているのですが、解決方法が分かりません。
NewLinkedListのみを修正して正しく表示されるソースをご教授願いたいです。
発生している問題・エラーメッセージ
ListTestを実行すると「[ banana cherry durian null ]→[abcd]ならOK」となってしまう
本当ならappleをbananaの左(先頭)に追加したいが、nullが表示されてしまう。
該当のソースコード
Java
1public class ListTest { 2 public static void main(String[] args) { 3 NewLinkedList list = new NewLinkedList(); 4 list.deleteNode("orange"); //d0 5 list.appendToHead("durian"); //h0 d 6 list.deleteNode("orange"); //d1 7 list.appendToHead("cherry"); //h1 cd 8 list.deleteNode("orange"); //d2 9 list.appendToHead("banana"); //h2 bcd 10 list.deleteNode("orange"); //d3 11 list.appendToHead("apple"); //h3 abcd 12 list.deleteNode("orange"); //d4 13 System.out.println(list + "→[abcd]ならOK"); 14} 15}
Java
1public class MyLinkedList { 2 // リストの要素 3 protected class Node { 4 Node next = null; // 次のリストへのリンク 5 String data; // 格納するデータ 6 7 // コンストラクター 8 Node(String d) { 9 data = d; 10 } 11 } 12 13 //リストの先頭を示すポインタ 14 //アドレス 15 Node head = new Node(null); 16 17 // リストの末尾に要素を追加する 18 public void appendToTail(String d) { 19 Node n = head; 20 while (n.next != null) { // 末尾を探す 21 n = n.next; 22 } 23 n.next = new Node(d); // 末尾にノードを生成して追加 24 System.out.println(d + " を末尾に追加しました。"); 25 } 26 27 // リストの内容を出力する 28 public String toString() { 29 StringBuilder st = new StringBuilder(); 30 st.append("[ "); 31 for (Node p = head.next; p != null; p = p.next) { 32 st.append(p.data + " "); 33 } 34 st.append("]"); 35 return st.toString(); 36 } 37 38}
Java
1 //リストの先頭に指定要素を追加するメソッド 2 //追加後「~ を先頭に追加しました。」を出力する。 3 //ただし ~ は指定要素名で直後に半角空白を入れる(以下同様)。 4 public void appendToHead(String d) { 5 //ノードの生成 6 Node newHead = new Node(d); 7 8 //元の先頭要素へのリンクを新ノードリンクに付け替える 9 newHead.next = head; 10 11 //新ノードを元の先頭要素のリンクに付け加える 12 head = newHead; 13 14 System.out.println(d + " を先頭に追加しました。"); 15 } 16 17 //指定データを持つ要素を削除するメソッド 18 //指定データがあれば削除して「~ を削除しました。」を出力する。 19 //ただし指定データが複数ある時は、先頭のものを1 つだけ削除する。 20 //指定データが無ければ「~ は存在しません。」を出力する。 21 public void deleteNode(String d) { 22 //Node n = head;を定義 23 Node n = head; 24 //指定データを持つノードが存在するまで繰り返し 25 while(n.next != null) { 26 //次要素が指定データを持っていた場合 27 if (n.next.data == d) { 28 //1つ先の要素へのリンクに付け替え 29 n.next = n.next.next; 30 System.out.println(d + " を削除しました。"); 31 return; 32 } 33 n = n.next; 34 } 35 System.out.println(d + " は存在しません。"); 36 return; 37 } 38 39} 40
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。