#include<stdio.h> #include<stdlib.h> typedef struct CELL {/*構造体の定義*/ int value;/*変数の定義*/ struct CELL* next;/*ポインターに関する変数の定義*/ }CELL;/*呼称*/ //関数 CELL* generateCELL() {/*generateCELLの定義*/ CELL* p;/*CELLポインター*/ if ((p = (CELL*)malloc(sizeof(CELL))) == NULL)/*条件分岐*/ { printf("メモリ不足です\n");/*画面表示*/ exit(1);/*exit関数の使用*/ } return p;/*戻り値*/ } //関数 void insertCELL_head(CELL* header, int n) {/*insertCELL_head関数の定義*/ CELL* head = generateCELL();/*ポインター*/ head->value = n;/*代入 アロー演算子連発*/ head->next = header->next;/*代入*/ header->next = head;/*代入*/ } //関数 void deleteCELL(CELL* header) {/*deleteCELL関数の定義*/ CELL* dele = header->next;/*ポインター*/ header->next = dele->next;/*代入*/ free(dele);/*free関数の使用*/ } void insertCELL_tail(CELL* header, int n) { CELL* tail = generateCELL();/*ポインター*/ tail->value = n; tail->next=NULL; while (header->next == NULL) { header->next = tail; tail->next = NULL; return; } } int main(void) {/*プログラム開始*/ CELL* header = generateCELL(); header->next = NULL; insertCELL_head(header, 30); insertCELL_head(header, 40); deleteCELL(header); insertCELL_head(header, 50); deleteCELL(header); insertCELL_head(header, 60); insertCELL_head(header, 70); insertCELL_tail(header, 20); CELL* q = header->next; while (q != NULL) { printf("value%d \n", q->value); q = q->next; } return 0; } コード ```### 前提・実現したいこと ここに質問の内容を詳しく書いてください。 連結リストで末尾に挿入するパターンで困っています。 ### 発生している問題・エラーメッセージ 連結リストで実行すると末尾にvalue20が加わり、表示させられるようにしたいのですが、デバッグすると表示されない value20を表示させたい(但し,メイン文やそのほかは変更しないようにinsertCELL_tail内のみの変更でお願いします) ``` エラーメッセージ なし ### 該当のソースコード ここに言語名を入力 C++ ソースコード void insertCELL_tail(CELL* header, int n) { CELL* tail = generateCELL();/*ポインター*/ tail->value = n; tail->next=NULL; while (header->next == NULL) { header->next = tail; tail->next = NULL; return; } } ### 試したこと #include<stdio.h> #include<stdlib.h> typedef struct CELL {/*構造体の定義*/ int value;/*変数の定義*/ struct CELL* next;/*ポインターに関する変数の定義*/ }CELL;/*呼称*/ //関数 CELL* generateCELL() {/*generateCELLの定義*/ CELL* p;/*CELLポインター*/ if ((p = (CELL*)malloc(sizeof(CELL))) == NULL)/*条件分岐*/ { printf("メモリ不足です\n");/*画面表示*/ exit(1);/*exit関数の使用*/ } return p;/*戻り値*/ } //関数 void insertCELL_head(CELL* header, int n) {/*insertCELL_head関数の定義*/ CELL* head = generateCELL();/*ポインター*/ head->value = n;/*代入 アロー演算子連発*/ head->next = header->next;/*代入*/ header->next = head;/*代入*/ } //関数 void deleteCELL(CELL* header) {/*deleteCELL関数の定義*/ CELL* dele = header->next;/*ポインター*/ header->next = dele->next;/*代入*/ free(dele);/*free関数の使用*/ } void insertCELL_tail(CELL* header, int n) { CELL* tail = generateCELL();/*ポインター*/ tail->value = n; tail->next=NULL; while (header->next == NULL) { header->next = tail; tail->next = NULL; return; } } int main(void) {/*プログラム開始*/ CELL* header = generateCELL(); header->next = NULL; insertCELL_head(header, 30); insertCELL_head(header, 40); deleteCELL(header); insertCELL_head(header, 50); deleteCELL(header); insertCELL_head(header, 60); insertCELL_head(header, 70); insertCELL_tail(header, 20); CELL* q = header->next; while (q != NULL) { printf("value%d \n", q->value); q = q->next; } return 0; } insertCELL_tail関数について試したこと take1 void insertCELL_tail(CELL* header, int n) { CELL* tail = generateCELL();/*ポインター*/ tail->value = n; tail->next=NULL; while (header->next == NULL) { header->next = tail; tail->next = NULL; return; } } take2 void insertCELL_tail(CELL* header, int n) { CELL* tail = generateCELL();/*ポインター*/ tail->value = n; while (header->next == NULL) { header->next = tail; } tail->next=NULL; } take3 void insertCELL_tail(CELL* header, int n) { CELL* tail = generateCELL();/*ポインター*/ tail->value = n; while (header->next == NULL) { header->next = tail; return; } tail->next=NULL; } take4 void insertCELL_tail(CELL* header, int n) { CELL* tail = generateCELL();/*ポインター*/ tail->value = n; tail->next=NULL; while (header->next != NULL) header = header->next; header->next = tail; } ### 補足情報(FW/ツールのバージョンなど) 以下のような骨組みがヒントとして与えられています void insertCELL_tail(CELL* header, int n) { //NULLを指す最後のポインターを探る } ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー