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

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

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

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

連結リスト

連結リストとは、データ構造のひとつであるリストの中で、要素が前後の要素の情報を持つことで、要素が連結(リンク)しているリストの事を呼びます。

Q&A

解決済

1回答

1069閲覧

連結リストの先頭に指定要素追加、削除したい

trainingnow

総合スコア22

Java

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

連結リスト

連結リストとは、データ構造のひとつであるリストの中で、要素が前後の要素の情報を持つことで、要素が連結(リンク)しているリストの事を呼びます。

0グッド

0クリップ

投稿2022/02/10 06:47

前提・実現したいこと

MyLinkedList、ListTestクラスを編集せずにNewLinkedListクラスを使って、連結リストの先頭に要素を追加し、指定のデータを持つ要素を削除したい。

手詰まりになってしまったため、どなたかお助けしていただけますでしょうか。
よろしくお願いします。

該当のソースコード

ListTest

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"); //d10 abc 15 list.appendToTail("durian"); //t3 abcd 16 list.deleteNode("banana"); //d9 acd 17 list.deleteNode("apple"); //d8 cd 18 list.appendToTail("cherry"); //t2 cdc 19 System.out.println(list + "→[cdc]ならOK"); 20 list.deleteNode("cherry"); //d8 dc 21 list.deleteNode("cherry"); //d7 d 22 list.appendToTail("cherry"); //t1 dc 23 list.deleteNode("durian"); //d6 c 24 list.deleteNode("cherry"); //d5 - 25 list.appendToTail("apple"); //t0 a 26 System.out.println(list + "→[a]ならOK"); 27 } 28}

MyLinkedList

1// リストの要素 2 protected class Node { 3 Node next = null; // 次のリストへのリンク 4 String data; // 格納するデータ 5 6 // コンストラクター 7 Node(String d) { 8 data = d; 9 } 10 } 11 12 //リストの先頭を示すポインタ 13 Node head = new Node(null); 14 15 // リストの末尾に要素を追加する 16 public void appendToTail(String d) { 17 Node n = head; 18 while (n.next != null) { // 末尾を探す 19 n = n.next; 20 } 21 n.next = new Node(d); // 末尾にノードを生成して追加 22 System.out.println(d + " を末尾に追加しました。"); 23 } 24 25 // リストの内容を出力する 26 public String toString() { 27 StringBuilder st = new StringBuilder(); 28 st.append("[ "); 29 for (Node p = head.next; p != null; p = p.next) { 30 st.append(p.data + " "); 31 } 32 st.append("]"); 33 return st.toString(); 34 } 35 36}

NewLinkedList

1public class NewLinkedList extends MyLinkedList{ 2 3 //リストの先頭に指定要素を追加するメソッド 4 //追加後「~ を先頭に追加しました。」を出力する。 5 //ただし ~ は指定要素名で直後に半角空白を入れる(以下同様)。 6 public void appendToHead(String d) { 7 System.out.println(d + " を先頭に追加しました。"); 8 } 9 10 //指定データを持つ要素を削除するメソッド 11 //指定データがあれば削除して「~ を削除しました。」を出力する。 12 //ただし指定データが複数ある時は、先頭のものを1 つだけ削除する。 13 //指定データが無ければ「~ は存在しません。」を出力する。 14 public void deleteNode(String d) { 15 16 } 17}

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

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

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

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

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

jimbe

2022/02/10 07:52

コードのマークダウンでクラス名を書かれている個所には言語名("java")をお書きください。 ファイル名はマークダウンの外に書くか、マークダウン内であればその言語のコメントにしてください。 また、コードはなるべく全文をご提示ください。 ご提示のコードを元にしたり実行する際に間違いが無いようにコピペをしますが、過不足があると修正するしか無く、その過程で間違いがあるとご質問の主旨と違うことになりかねません。
jimbe

2022/02/10 08:28

> 手詰まりになってしまった 何が手詰まりになったのでしょうか。
hoshi-takanori

2022/02/10 15:05

手詰まりというのは自分で出来ることをすべて試した場合に使う言葉ですが、これって課題をそのまま貼っただけで、自分ではまだ何もしてないのでは…。
trainingnow

2022/02/14 05:12

jimbeさん、ご丁寧にありがとうございます。 言語はJavaです。 また、コードは全文を提示しております。 質問の内容は、 連結リストの先頭に要素を追加し、指定のデータを持つ要素を削除したい。 と記載しております。 NewLinkedListのメソッド内部のソースを考えてはみたものの、先頭ではなく、列の後ろに追加されてしまうのです。 また、指定したデータの削除についてはどのようなソースを書いていったらいいのかわかっておりません。 出来ましたら、ご教授のほどよろしくお願いいたします。
jimbe

2022/02/14 12:25 編集

> コードは全文を提示しております 少なくとも MyLinkedList (と思われるコード片 ) はこのままではコンパイル出来ませんので、全文では無いと思います。 > NewLinkedListのメソッド内部のソースを考えてはみたものの、先頭ではなく、列の後ろに追加されてしまうのです。 ご提示の NewLinkedList のコードにはそのような記述は無いようです。 「~したいです。お願いします」というだけでは『作業依頼』と思われます。 teratail のヘルプ「質問するときのヒント https://teratail.com/help/question-tips 」では『質問をする前に自分で何がわからないのかを把握しましょう』『 今置かれている状況を整理し、わかっている範囲とわからない範囲を明確にしましょう』とあります。 「連結リストの先頭に要素を追加」「指定のデータを持つ要素を削除」につきまして、どこまで分かっていてどこからが分かっていないのかを仰って頂く必要があります。 例えば MyLinkedList の二つのメソッドの動作は完全に理解されているのでしょうか。 考えてみたと言われる「先頭ではなく、列の後ろに追加されて」しまったコードでは、どこまでその原因を調査されたのでしょうか。
trainingnow

2022/02/15 00:21

ご回答ありがとうございます。 申し訳ないですが、↑に提示してあるコードが全文になります。 全文ではないと指摘されましても、ないものはないです。 追加、削除のメソッドについては中身を記載しておりません。 そのメソッド内部についての記載方法が分からないためです。 質問に対してレスポンスを頂けることに対してはありがたいのですが、どこか揚げ足取りのように見えてしまいます。 単純に追加と削除の方法がわからないため、ソースを書いて教えていただきたと思い質問しました。 決して「作業依頼」ではありません。 どこまでわかっていて、どこからわかっていないのかという質問に対しての答えになっておりますでしょうか。
jimbe

2022/02/15 03:24

> どこか揚げ足取りのように見えてしまいます すみません。そのようなつもりは全くありませんが、考察・伝達する力が足りないようです。 下手な質問にお付き合い頂きありがとうございました。
trainingnow

2022/02/15 04:41

ありがとうございました。
guest

回答1

0

ベストアンサー

過去に同じコードのご質問がありましたのでリンク致します。

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

投稿2022/02/15 09:58

jimbe

総合スコア12646

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

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

trainingnow

2022/02/16 00:06

ありがとうございます。 しっかり勉強します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問