single
要素の追加
メニューを表示するにはスワイプしてください
単方向リンクリストを実用的にするには、ノードを追加する必要があります。ノードをリストに挿入するロジックを実装します。新しいノードを作成し、それらを接続し、リストに統合することで、要素を追加するたびにリストが動的に成長します。
この実践的なアプローチにより、内部で何が起こっているのかを正確に理解できます。
ノード挿入の実装
ノードを作成するシンプルな関数を記述します。この関数は以下を行います:
- ノードのデータフィールドに格納される型 int の数値を引数として受け取る;
- ノードのサイズを考慮して動的に割り当てられたメモリ領域へのポインタを作成する;
- ノードのメモリ割り当てが成功したかどうかを確認する;
- 必要な値(関数の引数)をデータフィールドに格納する;
- 次のポインタは NULL にする(この関数は1つのノードのみを作成するため);
- 関数は値が格納されたメモリ領域へのポインタを返す。
AddNewNode() 関数はポインタへのポインタを受け取ります。これは、リストの先頭(head)ノードへのポインタの値や、新しいノードに格納される値を変更できるためです:
void AddNewNode(struct Node** head, int value)
{
...
}
リストが空の場合(*head == NULL)、リストの先頭(*head)へのポインタを新しいノード(newNode)を指すように更新します。この場合、newNodeが最初のノード(ヘッドノード)となります。 リストが空でない場合は、ループを使って最後のノードを探します。
現在のノードはバッファノードの役割を果たし、これを使ってリストを順にたどり、どこにも指していないノード(*next == NULL)を見つけます。
struct Node* current = *head;
while (current->next != NULL)
{
...
}
最終的に、新しいノード newNode を最後のノードにする必要があります。つまり、current->next を newNode に設定します。これで newNode がリストの最後のノードになります。
課題として、既存のノードに新しいノードを追加する関数を考えて追加してください。
スワイプしてコーディングを開始
関数 addNewNode を作成し、単方向リンクリストの末尾に新しいノードを追加します。
関数内の手順:
- 変数
struct Node* newNodeを宣言し、createNode(value)を用いて新しいノードを作成します。 *head == NULLでリストが空かどうかを確認します。- リストが空の場合、
newNodeに*headを代入します。 - リストが空でない場合、
struct Node* currentを宣言し、*headを代入します。 whileループを使い、current->nextがNULLになるまでリストを走査します。- 最後のノードに到達したら、
current->next = newNodeとします。
解答
フィードバックありがとうございます!
single
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください