Мой код для односвязного списка выглядит следующим образом: где Мой узел имеет эти getters
и setters
GetNext()
и SetNext()
GetData()
и SetData()
template <class T>
void MyList<T>::Add(const T& data){
Node<T> *t = new Node<T>(data); // create node with givin data and set the next to null
Node<T> *tmp = head;
if (head == nullptr)
{
head = t;
}
else
{
while (tmp != nullptr)
{
cout << tmp->GetData()<< "\n";
tmp = tmp->GetNext(); // GetNext() returns Node<T>* next pointer
}
tmp = t;
}
}
Я сделал не перегружайте никакие операторы равенства.
Почему присвоение tmp = tmp->GetNext();
никогда не перемещается к следующему указателю !!!!
Пример минимального завершения
Вот минимальный пример, который показывает (при запуске), что добавляется только «42», но не второй элемент («12»).
#include <iostream>
template <typename T> class Node {
public:
Node<T>(const T &data) : data_(data) {}
Node<T> *GetNext() const { return next_; }
T GetData() const { return data_; }
private:
Node<T> *next_{nullptr};
T data_{};
};
template <class T> class MyList {
public:
void Add(const T &data) {
Node<T> *t = new Node<T>(
data); // create node with givin data and set the next to null
Node<T> *tmp = head;
if (head == nullptr) {
head = t;
} else {
while (tmp != nullptr) {
std::cout << tmp->GetData() << "\n";
tmp = tmp->GetNext(); // GetNext() returns Node<T>* next pointer
}
tmp = t;
}
}
private:
Node<T> *head{nullptr};
};
int main() {
MyList<int> list;
list.Add(42);
list.Add(12);
}
Вот ссылка для этого примера на Godbolt: https://godbolt.org/z/KTwwGT