C-Linked-List:如何将“ Head”保存在“ Temp”变量中,这样我不必每次都向后移动

时间:2019-03-19 12:18:32

标签: c string linked-list

如果出于任何原因遍历链表,打印,排序等,则必须向后遍历以重置头部。有更好的方法吗?

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;
    }

}

1 个答案:

答案 0 :(得分:3)

出于遍历列表的目的,无需修改原始的头部指针。取一个临时节点指针(局部变量),用头指针初始化它,然后使用它进行遍历。这样,您将不会修改列表的原始头指针

  void print_list(list * l) {

        list_node *tmp = l->head; 

        while(tmp) {
            printf("Word: %s\n", tmp->word);
            tmp = tmp->next;
        }
    }