我尝试编写代码以多次读取链表,而不调用void print(t_list *list)
之类的特定功能,请参见下面的代码。我可以弄清楚为什么在while上下文中第二次无法读取我的代码,因为在我的第一个循环结束时,我的结构t_list
是NULL
,而当我第二次启动时,我的结构struct仍然是NULL
,显然什么也不能使用。
所以我有两个问题,
第一个:为什么我在通过函数void print(t_list *list)
时可以读取两倍的链接列表,这很好,因为那是可行的,但是我不明白为什么在第二次读取t_list
时{ {1}}
second:如何在NULL
或while
上下文中倒退指针for
到开头,以再次读取链接列表。
t_list
控制台
#include <stdlib.h>
#include <stdio.h>
typedef struct s_list t_list;
struct s_list {
int arg;
t_list *next;
};
int add(t_list **ref,int arg) {
t_list *temp;
temp = NULL;
if(!(temp = (t_list*)malloc(sizeof(t_list))))
return (0);
temp->arg = arg;
temp->next = (*ref);
(*ref) = temp;
return(1);
}
void change(t_list *list) {
printf("change arg:\n");
while(list) {
list->arg = 42;
list = list->next;
}
}
void print(t_list *list) {
printf("list:\n");
while(list) {
printf("arg: %i\n",list->arg);
list = list->next;
}
}
int main() {
t_list *list;
list = NULL;
add(&list,0);
add(&list,1);
add(&list,2);
print(list); // work fine
change(list);
print(list); // work fine it's possible te read a second time but why ?
// that's way don't work a second time
while(list) {
printf("arg: %i\n",list->arg);
list = list->next;
}
while(list) {
printf("arg: %i\n",list->arg);
list = list->next;
}
return (0);
}