Заполнение двунаправленного списка на с++

Всем привет! Я новичок в программировании,изучаю с++ как первый свой язык. Дали лабу в вузе,мне нужно создать двунаправленный список и заполнить его рандомными числами от -50 до 50 Я создал список,сделал добавление,удаление Но именно заполнение всего списка я не могу реализовать. Пытался при помощи гугла решить проблему,не смог Вот код программы:

#include <ctime>
#include <string>


using namespace std;

int  ReadMenuItem() {
  string buttonStr;
  int button;
  while (true) {
      try {
          cin >> buttonStr;
          button = stoi(buttonStr);
          return button;
      }
      catch (const std::exception) {
          cout << "Invalid value , please type digit" << endl;
      }
  }
}
class MyList {                                       //Список MyList
  int x, count_;
  MyList* Head, * Tail, * Next, * Prev;
public:
  MyList() :count_(0), Head(NULL), Tail(NULL) {};     //Инициализация с помощью конструктора по умолчанию
  void Add(int);
  void Show();
  void Del(int);                                  //Функция принимает целочисленный параметр, обозначающий номер удаляемого элемента
  ~MyList();
};

/*ДОБАВЛЕНИЕ ЭЛЕМЕНТА В СПИСОК*/
void MyList::Add(int x) {
  MyList* temp = new MyList;
  temp->x = x;
  temp->Next = NULL;
  count_++;
  if (!Head) {
      temp->Prev = NULL;
      Head = temp;
      Tail = Head;
  }
  else {
      temp->Prev = Tail;                  //Указываем, что предыдущим элементом списка относительно добавленного, будет последний элемент существующего списка
      Tail->Next = temp;                  //Следующий за последним существующим это непосредственно сейчас добавляемый элемент списка
      Tail = temp;                        //После того как указали что есть настоящий и что предыдущий, объявляем, что последний существующий это только что добавленный элемент
  }
}

/*ПОКАЗЫВАЕТ СПИСОК НА ЭКРАНЕ*/
void MyList::Show() {
  MyList* t = Head;
  while (t) {
      cout << t->x << " ";
      t = t->Next;
  }
  cout << "\n\n";
}



/*ФУНКЦИЯ УДАЛЕНИЯ КОНКРЕТНОГО ЭЛЕМЕНТА ДВУСВЯЗНОГО СПИСКА*/
void MyList::Del(int x) {
  //Если удаляем первый элемент, то могут быть такие варианты
  //В списке есть только первый, в списке есть несколько элементов
  //Поэтому разбиваем логику выполнения
  if ((x == 1) and (Head->Next)) {                     //Если удаляем первый, но есть и другие, то
      MyList* temp = Head;                            //Указываем, что нам нужно начало списка
      Head = Head->Next;                              //Сдвигаем начало на следующий за началом элемент
      Head->Prev = NULL;                              //Делаем так, чтоб предыдущий началу элемент был пустым
      delete temp;                                    //Удаляем удаляемое начало
      count_--;                                       //Обязательно уменьшаем счетчик
      return;                                     //И выходим из функции
  }
  else if ((x == 1) and (Head == Tail)) {            //Если удаляем первый, но в списке только 1 элемент

      Head->Next = NULL;                              //обнуляем все что нужно
      Head = NULL;
      delete Head;                                    //Удаляем указатель на начало
      count_ = 0;                                     //Обязательно обозначаем, что в списке ноль элементов
      return;                                         //и выходим из функции
  }

  //Также может быть, что удаляемый элемент является последним элементом списка
  if (x == count_) {
      MyList* temp = Tail;                                //Указываем, что нам нужен хвост
      Tail = Tail->Prev;                                  //Отодвигаем хвост немного назад
      Tail->Next = NULL;                                  //Обозначаем, что впереди за хвостом пусто
      delete temp;                                        //Очищаем память от бывшего хвоста
      count_--;                                           //Обязательно уменьшаем счетчик элементов
      return;                                         //И выходим из функции
  }

  //Если же удаляемый элемент лежит где-то в середине списка, то тогда его можно удалить

  MyList* temp = Head, * temp2;                        //temp-Удаляемый элемент, temp2 нужен, чтобы не потерять данные

      //cout<<count_<<"\n";
  for (int i = 0; i < x - 1; i++) temp = temp->Next;  //Идем к адресу удаляемого элемента

  temp2 = temp;                                   //Временно запоминаем адрес удаляемого элемента
  temp2->Prev->Next = temp->Next;             //Записываем данные, что следующий за перед сейчас удаляемым элементом - это следующий от удаляемого
  temp2->Next->Prev = temp->Prev;               //а предыдущий для следующего - это предыдущий для удаляемого
  delete temp;                               //теперь смело можно освободить память, удалив адрес на начало удаляемого элемента
  count_--;                                         //Обязательно уменьшаем число элементов в списке.
}


/*ДЕСТРУКТОР ДЛЯ КОРРЕКТНОГО ВЫСВОБОЖДЕНИЯ ПАМЯТИ*/
MyList::~MyList() {
  //   cout<<"\nDELETES\n";
  while (Head) {
      // cout<<"Del is: "<<Head->x<<"  ";
      Tail = Head->Next;
      delete Head;
      Head = Tail;
  }
}
void Adding()
{

}

int main() {
  srand(time(NULL));
  void Adding();
  MyList List1;
  int ValueToAdd;
  int ValueToDelete;
  int count = 0;
  while (count < 1) {

      cout << "You can:\n1-Add element\n2-Delete Element\n3-Show elements\nWhich action do you choose?" << endl;
      int button = ReadMenuItem();
      if (button == 1) {
          cout << "Enter value to add" << endl;
          List1.Add(ValueToAdd = ReadMenuItem());
      }
      else if (button == 2) {
          cout << "Enter value to delete" << endl;
          List1.Del(ValueToDelete = ReadMenuItem());
      }
      else if (button == 3) {
          List1.Show();
      }
      else {
          cout << "Please ,choose your action" << endl;
      }

  }



  return 0;```

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