2014-02-09 184 views
0

這裏是我的結構創建鏈表有一個for循環

struct ListItem{ 

    int data; 
    struct ListItem *next; 

}; 

假設鏈表的第一個節點將有數據= 0,我想寫一個for循環,產生大小的鏈表5,但我不知道如何工作

我嘗試以下

int main(int argc, char* argv[]){ 

    struct ListItem a; 
    a.data = 0; 


    for (int i = 1; i < 5; i++){ 
     struct ListItem *pointer = &a; 
     struct ListItem nextnode; 
     nextnode.data = i; 
     a.next = &nextnode; 
     pointer = pointer->next; 

    } 
} 

但結果是 a.data = 0 和a.next->數據= 4

+0

你正在服用的引用到本地(nextnode)後獲得釋放,這樣做是不正確 - 您需要爲您創建的每個節點(和自由它的時候分配內存你完成了)。你熟悉C中的內存分配嗎? –

+0

每次通過循環時,您還將「指針」設置爲鏈接列表中的第一個節點,因此節點0指向節點4(N [0] - > N [4])並不奇怪。內存管理部分雖然是更大的關注。 –

回答

0

請勿修改。以temp開始。使其下一個指向新節點,然後將臨時節點設置爲新節點。也在堆中動態分配。否則,內存將在每次循環運行

+0

我明白爲什麼這會工作,但我不知道如何寫在語法 – user2917692

+0

node * tempnode =&a for(int i = 1; i <5; i ++) { node * next = new node() ; next-> val = i; tempnode-> next = next; tempnode = next; } – user3287648

0
struct ListItem a[5] = { {0, NULL}}; 
struct ListItem *pointer = &a[0]; 

for (int i = 0; i < 5; i++){ 
    a[i].data = i; 
    if(i != 5 -1) 
     a[i].next = &a[i+1]; 
}