我在双向链接列表上无法使用此打印功能

时间:2019-03-03 15:42:20

标签: c++ doubly-linked-list

因此,对于一个班级,我应该使用双向链表来创建一组飞行路线。该程序应该先打印出程,然后再打印回程列表(即达拉斯到休斯敦,然后休斯顿到达拉斯)。其他一切似乎都正常,但是在过去的四天左右,我一直无法使我的打印功能正常工作,我无法判断出问题所在。

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;  
}; 

我听说函数中的“最后一个”变量有些混乱。 “ last”变量背后的想法是,while循环将一直继续下去,直到程序将列表中的最后一个节点打印出来为止。因此,“ last”仅意味着我们要回到之前打印的最后/最新节点。因此,它只是打印常规打印功能中打印的内容,而是向后打印。

您会注意到,我在printList函数中注释掉了第一个while循环的一部分。当将其放回代码中并注释掉相应的while循环的最后一行时,第一组路线显然将类似于“达拉斯到达拉斯,休斯顿到休斯敦,等等...”。就是说,如果有一种方法可以在同一cout行中更新变量,那么这将不是问题。

我已经尝试将此功能拆分为两个(一个用于常规打印,一个用于反向打印),但两者都不起作用。这与我在打印之间更新变量有关吗?还是完全其他?

如果您想更直接地戳一下代码,这里是指向我repl.it的链接:A link the rest of this code...

1 个答案:

答案 0 :(得分: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;
};