typedef struct ooo{ //定义链表结构体
int value;
struct ooo* next;
}node;
typedef struct _list{ //代表头结点
node* head;
}list;
//声明结点创建函数 add
void add(int data,list* list);
//主函数
int main()
{
list list;
list.head = NULL; //定义头结点,并初始化为空
int data; //录入数据,输入-1 代表结束
do {
scanf("%d",&data);
if (data!=-1)
{
add(data,&list);
}
}while(data!=-1);
return 0;
}
//定义新结点函数 add
void add(int data,list* list)
{
node* new=(node*)malloc(sizeof(node)); //创建新结点并录入数据
new->value=data;
new->next = NULL;
//寻找已创建结点中的最后一个结点
node* last= list->head; //让最后一个结点等于此时的头结点
if(last) //遍历所有存在的结点,直到到达最后一个
{
while(last->next)
{
last=last->next;
}
last->next = new; //链接最后一个结点和新结点 new
}
else
{
list->head=new; //最初创建第一个新结点 new 时,让 head 头结点=该结点。
}
}
问题:看到最后可得知头结点 head 应该永远等于第一次创建的 new 结点, 即 head->next=new->next=NULL,并且每次进入 add 函数,last 都会等于 head,那么 last->next 也应该是 NULL, 所以头结点 head 的 next 永远是 NULL,那它到底是怎么和后边的结点连上的??? 而进来 add 函数以后,last 每个结点间又是怎么连上的呢?? 想了很久头都大了,仍然不得其解!!只能寄望于 v2 大佬了!!本小白先谢过啦!!!!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.