奇妙な問題があります。私はこのコードを持っていますが、うまくいきません。奇妙な部分は、関数内でリストが変更されることです (printf コマンドはこれを示します) が、この関数を呼び出すと、リストには何も追加されません (私のリストは空ではありません)。
void pushToList(node* list, int val) {
node* newNode = (node*) malloc(sizeof(node));
newNode->value=val;
newNode->next = list;
list = newNode;
printf("here, list->value = %d \n", list->value);
printf("here, list->next->value = %d \n", list->next->value);
}
// ----------------------------------
// if (list==NULL) {
// newNode->next = NULL;
// list = newNode;
// } else {
// newNode->next = list;
// list = newNode;
// }
たとえば、メイン関数でこの関数を次のように呼び出します。
node* node1;
pushToList(node1, 1111);
そして、ここに別のヘッダー ファイル (関数ファイルに含めたもの) の構造体と typedef があります。
#ifndef STACKELEMENT_H
#define STACKELEMENT_H
struct stackElement {
int value;
struct stackElement* next;
};
typedef struct stackElement node;
#endif /* STACKELEMENT_H */
別の奇妙な動作は、アイテムを追加するための次の関数があることです。この関数は、リストが空でない場合にのみ機能します。
int appendtoList(node* head, int val) {
node* current = head;
node* newNode = (node*) malloc(sizeof (node));
if(newNode == NULL){
fprintf(stderr, "Unable to allocate memory for the new node\n");
exit(-1);
}
newNode->value = val;
newNode->next = NULL;
while (current->next) {
current = current->next;
}
current->next = newNode;
// if (head->next == NULL) {
// head->next = newNode;
// } else {
// while (current->next != NULL) {
// current = current->next;
// }
// current->next = newNode;
// }
//
return 0;
}