如果出于任何原因遍历链表,打印,排序等,则必须向后遍历以重置头部。有更好的方法吗?
struct list_node {
struct list_node *next;
struct list_node *prev;
char word[30];
int word_count;
};
typedef struct list_node list_node;
struct list {
struct list_node * head;
int size;
};
typedef struct list list;
void print_list(list * l) {
while(l->head) {
printf("Word: %s\n", l->head->word);
if(l->head->next != NULL)
l->head = l->head->next;
else
break;
}
//now i reverse traverse the list so I can call printlist again if needed
while(l->head) {
if(l->head->prev != NULL)
l->head = l->head->prev;
else
break;
}
}
答案 0 :(得分:3)
出于遍历列表的目的,无需修改原始的头部指针。取一个临时节点指针(局部变量),用头指针初始化它,然后使用它进行遍历。这样,您将不会修改列表的原始头指针
void print_list(list * l) {
list_node *tmp = l->head;
while(tmp) {
printf("Word: %s\n", tmp->word);
tmp = tmp->next;
}
}