我在双链表上遇到此打印功能时遇到问题

问题描述 投票:-2回答:1

因此,对于一个班级,我应该使用双向链表创建一组航班行程。该计划应打印出境旅行然后打印回程旅行列表(即达拉斯到休斯顿然后休斯敦到达拉斯)。其他一切似乎都井然有序,但在过去的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; 
}  

}

这是struct NODE的样子:

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

我听说过对我函数中“last”变量的一些混淆。 “最后”变量背后的想法是,while循环将继续运行,直到程序打印列表中的最后一个节点。所以“最后”只意味着我们要回到之前打印过的最后一个节点。所以它只是打印刚刚在常规打印功能中打印的内容,但是向后打印。

你会注意到我在printList函数中注释掉了第一个while循环的一部分。当它被放回到代码中并且相应的while循环的最后一行被注释掉时,第一组行程显然看起来像“达拉斯到达拉斯,休斯顿到休斯顿等......”。也就是说,如果有一种方法可以更新同一cout行中的变量,这不会有问题。

我试过把这个功能分成两个(一个用于常规打印,一个用于反向打印),但也没有用。这是否与我在打印之间更新变量的事实有关?或者它完全是另一回事?

如果你想直接戳代码,这里是我的repl.it的链接:A link the rest of this code...

c++ doubly-linked-list
1个回答
0
投票

存在方法问题。双链列表必须具有结构中的第一个和最后一个元素指针。

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;
};
© www.soinside.com 2019 - 2024. All rights reserved.