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

问题描述 投票:1回答:1

如果我出于任何原因遍历我的链表,打印,排序等......我必须重新遍历它以重置头部。有一个更好的方法吗?

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

}
c string linked-list
1个回答
3
投票

无需为了遍历列表而修改原始头指针。获取一个临时节点指针(局部变量),用头指针初始化它并将其用于遍历。这样您就不会修改列表的原始头指针

  void print_list(list * l) {

        list_node *tmp = l->head; 

        while(tmp) {
            printf("Word: %s\n", tmp->word);
            tmp = tmp->next;
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.