我在双向链表上使用此打印功能时遇到问题
I'm having trouble with this print function on a Doubly Linked List
所以对于 class,我应该使用双重 linked 列表创建一组航班行程。该程序应该打印出发行程,然后打印 return 行程列表(即达拉斯到休斯顿,然后休斯顿到达拉斯)。其他一切似乎都正常,但在过去 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 {
string data;
struct NODE* next;
struct NODE* prev;
};
我听说函数中的 "last" 变量有些混乱。 "last" 变量背后的想法是 while 循环将一直运行直到程序打印出列表中的最后一个节点。所以 "last" 只是意味着我们要回到之前打印的 last/latest 节点。所以它只是打印刚刚在常规打印功能中打印的内容,但向后打印。
您会注意到我在 printList 函数中注释掉了第一个 while 循环的一部分。当它被放回代码中并且相应 while 循环的最后一行被注释掉时,第一组行程显然看起来像 "Dallas to Dallas, Houston to Houston, etc..."。也就是说,如果有一种方法可以在同一条 cout 行中更新变量,那将不是问题。
我试过将这个功能分成两个(一个用于正向打印,一个用于反向打印),但也没有用。这与我在打印之间更新变量这一事实有关吗?或者它完全是另外一回事?
如果你想更直接地戳代码,这里有一个 link 到我的 repl.it:A link the rest of this code...
方法有问题。双链表必须具有结构中的第一个和最后一个元素指针。
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;
};
所以对于 class,我应该使用双重 linked 列表创建一组航班行程。该程序应该打印出发行程,然后打印 return 行程列表(即达拉斯到休斯顿,然后休斯顿到达拉斯)。其他一切似乎都正常,但在过去 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 {
string data;
struct NODE* next;
struct NODE* prev;
};
我听说函数中的 "last" 变量有些混乱。 "last" 变量背后的想法是 while 循环将一直运行直到程序打印出列表中的最后一个节点。所以 "last" 只是意味着我们要回到之前打印的 last/latest 节点。所以它只是打印刚刚在常规打印功能中打印的内容,但向后打印。
您会注意到我在 printList 函数中注释掉了第一个 while 循环的一部分。当它被放回代码中并且相应 while 循环的最后一行被注释掉时,第一组行程显然看起来像 "Dallas to Dallas, Houston to Houston, etc..."。也就是说,如果有一种方法可以在同一条 cout 行中更新变量,那将不是问题。
我试过将这个功能分成两个(一个用于正向打印,一个用于反向打印),但也没有用。这与我在打印之间更新变量这一事实有关吗?或者它完全是另外一回事?
如果你想更直接地戳代码,这里有一个 link 到我的 repl.it:A link the rest of this code...
方法有问题。双链表必须具有结构中的第一个和最后一个元素指针。
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;
};