Menu
Coddy logo textTech

復習 - 連結リストの構築

CoddyのGOジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 24/107。

challenge icon

チャレンジ

簡単

ゼロから連結リストを構築してみましょう!各ノードが次のノードを指し、メモリ内で接続された値のチェーンを形成するデータ構造を作成します。

コードは2つのファイルに分けて構成します:

  • linkedlist.go: Value (int) と Next (*Node) フィールドを持つ Node 構造体を定義します。Head ノードへのポインタを保持する LinkedList 構造体を作成します。*LinkedList に以下のメソッドを実装してください:
    • Append - 指定された値を持つ新しいノードをリストの最後に追加します
    • Prepend - 指定された値を持つ新しいノードをリストの最初に追加します
    • Print - リストをトラバースし、すべての値を -> で区切って表示し、最後に nil を付けて出力します
  • main.go: 入力から値を読み取り、ノードを append および prepend して連結リストを構築し、最終的なリスト構造を出力します。

以下の入力が提供されます:

  • 1行目: append する最初の値
  • 2行目: append する2番目の値
  • 3行目: prepend する値

Print メソッドは、以下の形式でリストを出力する必要があります:

[value1] -> [value2] -> [value3] -> nil

例えば、10205 が与えられた場合、出力は以下のようになります:

5 -> 10 -> 20 -> nil

Append メソッドは、新しいノードを追加する前に、リストの末尾(Nextnil の場所)までトラバースする必要があります。Prepend メソッドは、新しいノードを作成し、その Next を現在の head に向け、その後 head を新しいノードに更新する必要があります。空のリストは head が nil であることに注意し、Append メソッドでそのケースを処理してください。

自分で試してみよう

package main

import "fmt"

func main() {
	// 入力値を読み込む
	var val1, val2, val3 int
	fmt.Scanln(&val1)
	fmt.Scanln(&val2)
	fmt.Scanln(&val3)

	// 新しい連結リストを作成する
	list := &LinkedList{}

	// TODO: Appendを使用してval1とval2をリストに追加する

	// TODO: Prependを使用してval3をリストの先頭に追加する

	// TODO: 最終的なリスト構造を出力する
}

オブジェクト指向プログラミングのすべてのレッスン