2011-06-30 23 views
4

我試圖使用鏈表作爲一種方式來增強我對C中指針的知識。所以,我寫了一個小例子,但是當我編譯它時,我得到一個我似乎無法弄清的錯誤:鏈接列表讓我的大腦變得脆弱。我應該怎麼做?

In function 'append_node': 
error: request for member ‘next’ in something not a structure or union 

通過引用訪問(或傳遞)結構的正確方法是什麼?

#include <stdio.h> 
#include <stdlib.h> 

struct node { 
    int val; 
    struct node *next; 
}; 

static int append_node(int val, struct node **head) { 
    struct node *new_node; 

    new_node = (struct node *) malloc(sizeof(struct node)); 
    new_node->val = val; 
    new_node->next = NULL 

    *(head)->next = new; 

    return 0; 
} 

int main() { 
    int i; 
    struct node *head; 
    struct node *curr; 

    head = NULL; 
    curr = (struct node *) malloc(sizeof(struct node)); 

    for(i = 1; i <= 10; i++) { 
     append_node(i, &curr); 
     head = curr; 
    } 

    curr = head; 
    while(curr) { 
     printf("%d\n", curr->val); 
     curr = curr->next ; 
    } 

    return 0; 
} 

任何幫助將是偉大的!

+0

到目前爲止所有回覆的人:1)指向新節點的指針稱爲'new_node'而不是'new'。 2)通過將新節點分配給'(* head) - > next',列表的其餘部分將被剔除(並泄漏):想法是讓新節點成爲新的頭部,這就是爲什麼函數是指向該節點的_double_指針 – Rom

回答

3

我可以假設你得到這條線上的錯誤嗎?

*(head)->next = new; 

我認爲你需要做一個平凡的變化:

(*head)->next = new; 

由於head是一個指針的指針,當你解引用它,你得到一個指針。 ->next在該指針上運行。

3

兩個問題:

有一個在

new->next = NULL 

末失蹤;和改變

*(head)->next = new; 

(*head)->next = new; 
1

試試這個:

(*head)->next = new_node; 

打開**head*head,然後調用它的成員。