#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 代码有什么问题?
答案 0 :(得分:6)
创建后,您没有将list
指向下一个节点,因此您每次都只是覆盖前一个节点。试试这个:
for(i=0;i<10;i++)
{
list->item = i;
list->link = (struct node *)malloc(sizeof(struct node));
list = list->link;
}
答案 1 :(得分: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;
}
}