2013-02-01 98 views
-1

下面的代碼應該在C中創建一個單獨鏈接的列表。我想了解insert_node用指針頭做什麼。每次調用insert_node時,「head」指向什麼?C中一個結構體中的結構暗示了什麼?

struct node{ 
    int data; 
    struct node* next; 
}; 
typedef struct node node; 

    node* head = NULL; 

void insert_node(int data) { 
    node *new_node = (node*) malloc(sizeof(node)); 
    new_node->data = data; 
    new_node->next = head; 
    head = new_node; 
} 
+0

你可能想要改變你的問題標題,因爲它有點誤導。 –

+0

第一行爲「結構節點」分配內存以創建新節點。第二行填滿這個新創建的節點中的數據字段。第三行設置指向現有頭的下一個指針,從而將此節點鏈接到現有鏈接列表。第四行將這個新節點標記爲新的節點。 – Tuxdude

+0

謝謝,我想我可以讀取第三行和第四行,「new_node-> next'的指針地址改變爲'head'的指針地址,它指向一個NULL值,然後'head'的指針地址改變爲'new_node'的指針地址,這是一個結構。 – Pippi

回答

4

head將指向鏈表的開始(列表中的第一個條目)。要獲得後續元素,只需按照node內的next指針。

每次添加新節點時,都會將新元素的next設置爲當前的head,並將head設置爲新元素,以便將元素鏈接在一起。

+0

不是「new_node-> next = head;」使下一個節點成爲「head」?然後「head」指向新節點?我完全困惑 – Pippi

+0

'new_node-> next = head'將當前'head'設置爲列表中的第二個元素,'head = new_node'將新節點設置爲列表的開始處 –

+0

After 'head = new_node','new_node-> next'是什麼? – Pippi

2

問:C中的結構體中的結構暗示了什麼? A:在這種情況下,「struct node *」僅用作指針,指向類型爲「struct node」的列表項。

這是一個類型聲明:

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

這是一個變量定義:node* head = NULL;這相當於說struct node * head = NULL;

這是一個變量賦值:node *new_node = (node*) malloc(sizeof(node));

變量 「頭」只是一個指向你列表開始的指針。無論何時您想使用列表,這都是您的「起點」:包括添加內容或查找列表中的內容。

「下一個」總是指向「列表中的下一個項目」。在初始化列表之前,「頭」爲空。當它是列表中的最後一項時,每個「下一個」始終爲空。

「頭」只會更改一次 - 當您初始化列表。 「下一步」會更改兩次:1)首次添加節點時將其設置爲空,以及2)在添加後續節點時將其重置爲指向下一個節點。

'希望可以幫到..

+0

它的確如此,並感謝您的解釋! – Pippi