Понимание кода связанного списка и как это исправить от перемещения головы? - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь выяснить, как использовать связанные списки, и я вроде как понимаю, однако я столкнулся с ошибкой. Я использовал учебник YouTube, который был хорош, однако он не объяснил этот код, и я скопировал его у него и попытался понять его в своем собственном темпе, однако я не могу понять, почему он работает таким образом и как его исправить.

            if(firstnode == 0){
            temp = addtolist(request2);
            head = temp;
            firstnode++;
            }
            else{
            temp = addtolist(request2);
            temp->next = head;
            head = temp;
            }

Добавить к списку код

            linkedlist *addtolist(char value[]){
            linkedlist *result = malloc(sizeof(linkedlist));
            strcpy(result->data,value);
            result->next = NULL;
            return result;
            }

Firstnode - это просто целое число, чтобы проверить, создал ли пользователь узел или нет. И request2 - это просто значение, которое я sh должен сохранить в узле. Я задаюсь вопросом, как сделать так, чтобы мой связанный список был в правильном порядке, когда я его печатаю, так как я каждый раз двигаю голову, что я могу сделать, чтобы предотвратить это и правильно связать список? Извините, если это глупый вопрос, но я не могу понять, как это работает.

1 Ответ

4 голосов
/ 17 января 2020

в этом коде вы реализуете что-то вроде списка FIFO (вы перемещаете его при каждом добавлении узла), вы можете проверить, что FIFO находится здесь:

https://en.wikipedia.org/wiki/FIFO_ ( computing_and_electronics)

Если я правильно понимаю, вы пытаетесь реализовать список LIFO

https://en.wikipedia.org/wiki/Stack_ (abstract_data_type)

В следующем коде я сохранил голову и использовал хвостовой узел для добавления новых узлов.

    if (firstnode == 0) {
        temp = addtolist(request2);
        head = temp;
        tail = head;
        firstnode++;
    }
    else {
        temp = addtolist(request2);
        tail->next = temp;
        tail = temp;
    }
...