Вставка связанного списка c ++, все случаи проверены, но ничего не работает - PullRequest
0 голосов
/ 29 октября 2018

Поэтому я пытаюсь создать простой односвязный список без хвоста и собираюсь использовать другой класс "CarObject", чтобы добавить его в мой CarList, который по сути является моим связанным списком. Единственная проблема заключается в том, что после написания кода и его тестирования ничего не печатается / работает, я даже не получаю сообщение об ошибке. Я немного растерялся и не уверен, что сделал неправильно.

ОБНОВЛЕНИЕ! : допустим, мы игнорируем мой код, но как бы вы реализовали функцию добавления в связанный список (без хвоста)

class CarList
{
    class NodeType{

       friend class CarList;
       private:
         CarObject* data;
         NodeType* next;
     };



    public:
        void addCar(CarObject*);


    private:     
        NodeType *head;



};

void CarList::addCar(CarObject *car){


  NodeType* newNode;
  NodeType* currNode;


  newNode = new NodeType;
  newNode->data = car;
  newNode->next = NULL;

  currNode = head;


  while (currNode != NULL) {
    if (car->getYearModel().lessThan(currNode->data->getYearModel()))
      break;

    currNode = currNode->next;
  }

  newNode->next = currNode;
}

void CarList::print(){

    NodeType* currNode = head;
   while (currNode != NULL) {
    currNode->data->printTheCarInfo();
    currNode = currNode->next;
  }



}

1 Ответ

0 голосов
/ 29 октября 2018

Вы забыли обновить указатель next предыдущего узла:

  NodeType* prevNode = NULL;
  while (currNode != NULL) {
    if (car->getYearModel().lessThan(currNode->data->getYearModel()))
      break;

    prevNode = currNode; //remember the previous node
    currNode = currNode->next;
  }

  newNode->next = currNode;
  if (prevNode)
      prevNode->next = newNode;
  else
      head = newNode; //if there's no previous node - newNode is the new head!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...