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;
    }
}

正如标题所示,我试图迭代地遍历链表,预期输出为 0 1 。. 9 观察到的输出是: 9 代码有什么问题?

4

2 回答 2

6

创建下一个节点后,您并没有指向list它,因此您只是每次都覆盖前一个节点。试试这个:

for(i=0;i<10;i++)
{
    list->item = i;
    list->link = (struct node *)malloc(sizeof(struct node));
    list = list->link;
}
于 2013-02-07T18:00:06.490 回答
4

这只是因为您的代码中有一个语句。当您尝试分配新链接时,您忘记指向下一个链接。因此,您仅在一个指针上分配,因此存在内存泄漏。

#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;
    }   
}
于 2013-02-07T17:59:51.933 回答