2013-02-07 41 views
0
#include<stdio.h> 
struct node 
{ 
    int item; 
    struct node *link 
}; 

main() 
{ 
    struct node *start,*list; 
    int i; 
    start = (struct node *)malloc(sizeof(struct node)); 
    list = start; 
    start->link = NULL; 
    for(i=0;i<10;i++) 
    { 
     list->item = i; 
    list->link = (struct node *)malloc(sizeof(struct node)); 
    } 
    list->link = NULL; 
    while(start != NULL) 
    { 
     printf("%d\n",start->item); 
    start = start->link; 
    } 
} 

正如標題中這表明我試圖通過一個鏈表來遍歷itteratively 預期輸出爲0 。 。 和觀察到的輸出是:9 代碼有什麼問題?通過鏈表遍歷

+2

for循環,你分配你忘了內存多加一個聲明'列表=列表 - > link' – Raj

回答

3

這只是因爲你的代碼中有一條語句。 當您嘗試分配新鏈接時,您忘記指向下一個鏈接。 因爲你只在一個指針分配,因此有內存泄漏。

#include<stdio.h> 
struct node 
{ 
    int item; 
    struct node *link 
}; 

main() 
{ 
    struct node *start,*list; 
    int i; 
    start = (struct node *)malloc(sizeof(struct node)); 
    list = start; 
    start->link = NULL; 
    for(i=0;i<10;i++) 
    { 
     list->item = i; 
     list->link = (struct node *)malloc(sizeof(struct node)); 
     list = list->link; 
    } 
    list->link = NULL; 
    while(start != NULL) 
    { 
     printf("%d\n",start->item); 
     start = start->link; 
    } 
} 
+0

感謝它的工作答覆:) – user1905568

5

你是不是在你創建後的下一個節點指向list,所以你只是每次覆蓋前一個節點。試試這個:在您的

for(i=0;i<10;i++) 
{ 
    list->item = i; 
    list->link = (struct node *)malloc(sizeof(struct node)); 
    list = list->link; 
} 
+0

!謝謝你回覆:) – user1905568