我有一个奇怪的问题。我有这段代码,但它不起作用。奇怪的是,在函数内部,列表发生了变化(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;
// }
例如,我在我的 main 函数中调用此函数,如下所示:
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;
}