質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

1回答

1720閲覧

リストの先頭がnullの場合にリストの先頭に要素を追加するときの処理がわかりません。

pocopiiiiiii

総合スコア1

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2021/06/26 22:51

リストの先頭が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コード

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

Node head = new Node(null);としているのが原因なんですが

headがnullの場合の対処とコードを教えていただきたいです。

やりたいことと書いてあることが合っているのか、わからないので
対処方法は、わからないのですが。

java

1if(head == null) { 2// なにか対処 3}

で、よいのではないでしょうか。


"apple"が追加できないです。

追加できないのでなく、headを表示しないからでは?

java

1//for(Node p = head.next; p!=null; p=p.next){ 2for(Node p = head; p!=null; p=p.next){ 3 st.append(p.data + " "); 4}

[ banana cherry durian null ]になってしまういます。

末尾がnullと表示されるのを気にしているなら
Listの末尾のdataは必ずnullになるので、対処が必要です。

java

1//for(Node p = head.next; p!=null; p=p.next){ 2for(Node p = head.next; p!=null && p.data != null; p=p.next){ 3 st.append(p.data + " "); 4}

投稿2021/06/28 01:45

momon-ga

総合スコア4820

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問