リストの先頭がnullの場合にリストの先頭に要素を追加するときの処理がわかりません。
以下のソースで要素の先頭追加、末尾追加、削除を繰り返し、
「ListTest.java」を実行して
リストの結果が正しいことを確認するプログラムです。
実行したのですが、リストが正しい結果になりません。
【質問1】
System.out.println(list + "→[abcd]なら OK");
のところで
[ banana cherry durian null ]になってしまういます。
「MyLinkedList.java」で
Node head = new Node(null);としているのが原因なんですが
headがnullの場合の対処とコードを教えていただきたいです。
【質問2】
"apple"が追加できないです。
それまでの"banana"までは追加できているのに、
appleが追加できないのは何故でしょうか。
正しいソースも教えていただければ幸いです。
JAVA
1 2class MyLinkedList { 3 // リストの要素 4 protected class Node { 5 Node next = null; // 次のリストへのリンク 6 String data; // 格納するデータ 7 Node(String d) {data = d;} // コンストラクター 8 } 9 10 Node head = new Node(null); 11 12 // リストの末尾に要素を追加する 13 public void appendToHead(String d) { 14 Node n = head; 15 while (n.next != null) { // 末尾を探す 16 n = n.next; 17 } 18 n.next = new Node(d); // 末尾にノードを生成して追加 19 System.out.println(d + " を末尾に追加しました。addtail"); 20 } 21 22 // リストの内容を出力する 23 public String toString(){ 24 StringBuilder st = new StringBuilder(); 25 st.append("[ "); 26 for(Node p = head.next; p!=null; p=p.next){ 27 st.append(p.data + " "); 28 } 29 st.append("]"); 30 return st.toString(); 31 } 32}
JAVA
1class NewLinkedList extends MyLinkedList{ 2 MyLinkedList mll = new MyLinkedList(); 3 4 Node next = head; 5 6 //リストの先頭に指定要素を追加するメソッド 7 public void appendToHead(String d) { 8 Node node = new Node(d); 9 node.next = head; 10 head = node; 11 System.out.println(d + " を先頭に追加しました。addhead"); 12 } 13 14 //リストの末尾に指定要素を追加するメソッド 15 public void appendToTail(String d) { 16 mll.appendToHead(d); 17 } 18 19 20 //指定データを持つ要素を削除するメソッド 21 public void deleteNode(String d) { 22 Node n = head; 23 while(n.next != null){ 24 if(n.next.data == d){ 25 n.next = n.next.next; 26 System.out.println(d + " を削除しました。delete"); 27 return; 28 } 29 n = n.next; 30 }System.out.println(d + " は存在しませんでした。notexit"); 31 32 return; 33 } 34} 35 36 37
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 list.deleteNode("durian"); 15 list.appendToTail("durian"); 16 list.deleteNode("banana"); 17 list.deleteNode("apple"); 18 list.appendToTail("cherry"); 19 System.out.println(list + "→[cdc]なら OK"); 20 list.deleteNode("cherry"); 21 list.deleteNode("cherry"); 22 list.appendToTail("cherry"); 23 list.deleteNode("durian"); 24 list.appendToTail("apple"); 25 System.out.println(list + "→[a]なら OK"); 26 } 27} 28コード
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。