C-Linked-List: как сохранить 'Head' в 'Temp' var, чтобы мне не приходилось перемещаться назад каждый раз - PullRequest
1 голос
/ 19 марта 2019

Если я по какой-либо причине просматриваю свой связанный список, печатаю, сортирую и т.д. Есть ли лучший способ сделать это?

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 Ответ

3 голосов
/ 19 марта 2019

Нет необходимости изменять исходный указатель головы с целью обхода списка.Возьмите временный указатель узла (локальная переменная), инициализируйте его указателем головы и используйте его для обхода.Таким образом, вы не будете изменять исходный указатель заголовка списка

  void print_list(list * l) {

        list_node *tmp = l->head; 

        while(tmp) {
            printf("Word: %s\n", tmp->word);
            tmp = tmp->next;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...