如果我出于任何原因遍历我的链表,打印,排序等......我必须重新遍历它以重置头部。有一个更好的方法吗?
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;
}
}
无需为了遍历列表而修改原始头指针。获取一个临时节点指针(局部变量),用头指针初始化它并将其用于遍历。这样您就不会修改列表的原始头指针
void print_list(list * l) {
list_node *tmp = l->head;
while(tmp) {
printf("Word: %s\n", tmp->word);
tmp = tmp->next;
}
}