我被告知,這將無法正確地將節點添加到列表中,但我已經測試它,它似乎工作。任何人都可以讓我知道這段代碼中的錯誤嗎?將元素添加到c中的列表開頭的代碼 - 錯誤是什麼?
struct node {
int num;
struct node* next;
};
void add_first(struct node* head, struct node* new_node) {
new_node->next = head;
head = new_node;
}
我試圖回答的具體問題是:
一)此功能將無法得到期望的結果(即,添加節點)。什麼是問題,什麼時候發生?
爲了嘗試找到問題,我創建了四個節點,在它們上使用add_first函數,然後顯示結果。不過,我似乎得到了正確的輸出結果。這是我整個編寫的程序,不包括上述功能:
void display(struct node* head) {
printf("%d ", head->num);
if(head->next == NULL) {
return;
}
display(head->next);
}
int main() {
struct node* n1;
struct node* n2;
struct node* n3;
n1 = (struct node*)malloc(sizeof(struct node*));
n2 = (struct node*)malloc(sizeof(struct node*));
n3 = (struct node*)malloc(sizeof(struct node*));
n1->num = 1;
n2->num = 2;
n3->num = 3;
add_first(n1, n2);
add_first(n2, n3);
display(n3);
return 0;
}
我得到的輸出是:
這似乎是正確的。所以,如果我得到正確的輸出,爲什麼函數不能給出預期的結果?我沒有看到它的問題。
majar問題是,你不能更新調用者的節點。嘗試更改API以使其更像'n1 = add_first(n1,n2);'(返回頭部)並且其他問題是'sizeof(struct node *)' - >'sizeof(struct node)'並且'next'沒有被初始化。 E.g'n1-> num = 1;' - >'n1-> num = 1; n1-> next = NULL;' – BLUEPIXY