2014-02-09 141 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]; 
}