Я пытаюсь создать связанный список при изучении языка C ++ и реализовать функцию вставки узла от низшего к высшему.Я следовал некоторым учебникам в Интернете и учебникам.
У меня есть структура для настройки узла связанного списка следующим образом:
struct Node {
private:
int _data;
Node *_next = nullptr;
public:
Node () : _data ((int) (NULL)), _next (nullptr) { /* */ };
explicit Node (int &value) : _data (*&value), _next (nullptr) { /* */ };
friend class LL;
};
Мой класс LL:
class LL {
private:
Node *first;
public:
LL () : first (nullptr)
{ /* */ };
void PrintList ();
void Push_front (int x);
void Push_back (int x);
void Delete (int x);
void Clear ();
void Reverse ();
void LTH(int x);
};
Тогда моя функция класса от низшего к наибольшему:
void LL::LTH(int x)
{
Node *current = this->first;
Node *newNode = new Node (x);
if (this->first == NULL || (current->_data) >= newNode->_data)
{
newNode->_next = this->first;
this->first = new Node (x);
}
else
{
current = this->first;
while (current->_next!=NULL &&
current->_next->_data < newNode->_data)
{
current = current->_next;
}
newNode->_next = current->_next;
current->_next = new Node (x);
}
}
Мой LL: PrintList ()
void LL::PrintList ()
{
if (this->first == nullptr)
{
std::cout << "List is empty.\n";
return;
}
Node *current = this->first;
while (current != nullptr)
{
std::cout << current->_data << " ";
current = current->_next;
}
std::cout << std::endl;
}
Мой основной
LL list;
// Changed to for-loop, original is reading binary data random integers
for (int i = 0; i < 20; i++)
{
list.LTH(i);
}
list.PrintList ();
Затем выводится от низшего к высшему, но пропускается через некоторые узлы:
// Linked-List Nodes
41, 34, 74, 87, 33, 25, 69, 75, 85, 30, 79, 61, 38, 49, 73, 64, 57, 95, 61, 86
// Output: LL:LTH() (Lowest -> Highest)
25, 30, 38, 49, 57, 61, 86
// It's Missing (XX)
XX, XX, XX, XX, XX, 25, XX, XX, XX, 30, XX, 61, 38, 49, XX, XX, 57, XX, XX, 86