Как работает указатель pNext в односвязном списке

у меня возможно довольно легкий вопрос,но я не могу разобраться. Есть у меня начальная реализация однонаправленного списка List.h:

    #pragma once
    #include <iostream>

    template <typename T>
    class List {
    private:    
        template <typename T>
        class Node {
        public:
            Node* pNext;
            T data;

            Node(T data = T(), Node* pNext = nullptr) {
                this->data = data;
                this->pNext = pNext;
            }
        };
        int SIZE;
        Node<T> *head;
    public:
        List();
        ~List();

        int get_size() { return this->SIZE; }

        void push_back(T);

        T& operator [](const int);
    };

List.cpp:

#include "List.h"

template <typename T>
List<T>::List() {
    SIZE = 0;
    head = nullptr;
}

template <typename T>
List<T>::~List() {

}

template <typename T>
void List<T>::push_back(T data) {
    if (head == nullptr) {
        head = new Node<T>(data);
    }
    else {
        Node<T> *current = this->head;
        while (current->pNext != nullptr) {
            current = current->pNext;
        }
        current->pNext = new Node<T>(data);
    }

    SIZE++;
}

template <typename T>
T& List<T>::operator[](const int index) {
    int counter = 0;
    Node<T>* current = this->head;
    while (current != nullptr) {
        if (counter == index) {
            return current->data;
        }
        current = current->pNext;
        counter++;
    }
}

Main.cpp:

#include <iostream>
#include "List.h"
#include "List.cpp"

int main() {
    setlocale(LC_ALL, "Ukrainian");
    List<int> lst;
    lst.push_back(5);
    lst.push_back(10);
    lst.push_back(15);
    std::cout << lst.get_size() << std::endl;
    std::cout << lst[2] << std::endl;
    return 0;
}

Я не могу понять логику указателя pNext.Тоесть сначала список пуст,соотвественно он указывает на nullptr.Потом я добавляю елемент в список,который становиться первым и все еще указывает на nullptr,дальше я добавляю второй елемент который указывает так же на nullptr,но в какой момент предыдущий елемент меняет nullptr на адрес следующего елемента?


Ответы (0 шт):