У меня проблемы с этой функцией печати в двусвязном списке - PullRequest
0 голосов
/ 03 марта 2019

Итак, для класса я должен создать набор маршрутов полетов, используя двусвязный список.Предполагается, что программа распечатает исходящие поездки, а затем распечатает список обратных поездок (т.е. из Далласа в Хьюстон, затем из Хьюстона в Даллас).Все остальное вроде в порядке, но последние 4 дня или около того я не смог заставить работать свою функцию печати, я не могу сказать, что происходит не так.

void list::printList(struct NODE* NODE){  
struct NODE* last;  
cout<<"Flight Records for HowardAir Flight CSCI0136:"<<endl;
while (NODE != NULL) {  
    cout<< NODE->data << " to ";//<< NODE->data<<endl;  
    last = NODE;  
    NODE = NODE->next;  
    cout<<NODE->data<<endl;
}  
cout<<""<<endl; 

cout<<"Reverse Flight Records for HowardAir Flight CSCI0136:"<<endl;  
while (last != NULL) {  
    cout<<last->data<< " to ";  
    last = last->prev;  
    cout<<last->data<<endl; 
}  

}

Вот как выглядит структура NODE:

struct NODE {  
    string data;  
    struct NODE* next;  
    struct NODE* prev;  
}; 

Я слышал о некоторой путанице по поводу "последней" переменной в моей функции.Идея «последней» переменной заключается в том, что цикл while будет продолжать работать до тех пор, пока программа не напечатает последний узел в списке.Таким образом, «последний» просто означает, что мы возвращались к последнему / последнему узлу, который был напечатан ранее.Так что это просто печать того, что было напечатано в обычной функции печати, но в обратном направлении.

Вы заметите, что я закомментировал часть первого цикла while в функции printList.Когда он помещается обратно в код и последняя строка этого соответствующего цикла while закомментирована, первый набор маршрутов, очевидно, будет выглядеть как «Даллас - Даллас, Хьюстон - Хьюстон и т. Д.».Тем не менее, если бы я мог обновить переменную в той же строке cout, это не было бы проблемой.

Я попытался разделить эту функцию на две (одна для обычной печати и одна для обратной печати), но это тоже не сработало.Это как-то связано с тем, что я обновляю переменную между отпечатками?Или это что-то совсем другое?

Вот ссылка на мой repl.it, если вы хотите более прямо ткнуть в код: Ссылка на остальную часть этого кода ...

1 Ответ

0 голосов
/ 03 марта 2019

Существует проблема метода.Список с двойной цепью должен иметь первый и последний элементный указатель в структуре.

struct T_Element
{
   previous *T_Element = nullptr;
   next *T_Element     = nullptr;
};

class T_List
{
public:
/*add and delete functions*/
   void print()
   {
       for(T_Element *element = first; element != nullptr ; element = element->next)
       {
          print(element); /*to define*/
       }
   }
   void reversePrint()
   {
      for(T_Element *element = last; element != nullptr ; element = element->previous)
     {
        print(element); /*to define*/
     }
  }
private:
   first *T_Element = nullptr;
   last *T_Element  = nullptr;
};
...