我正在尝试打印数字行的问题。我有一个包含两个链接列表的对象。一个列表是正数(包括零),而一个链接列表是负数(从-1开始),我有一个指向每个列表开头的指针。我想做的是按顺序打印出列表。因此,如果否定链表有五个节点,而肯定链表有六个节点,我想打印
-5 -4 -2 -1 0 1 2 3 4 5
我写了一些代码,以便按顺序打印出肯定列表。我很难弄清楚如何以相反的顺序打印否定列表。该函数将覆盖<<操作符,如下所示:
// output operator
std::ostream& operator <<(std::ostream& os, numberLine const& obj) {
LinkedListNode* temp = obj.negHeader;
int counter = 0;
while (temp->next != NULL) {
temp = temp->next;
counter++;
}
while (temp->next != NULL) {
for (counter; counter > 0; counter--) {
temp = temp->next;
}
os << temp->value;
}
//everything under this prints the nonNeg list
temp = obj.nonNegHeader;
//goes through the nonNeg list and prints each element if its not null
while (temp->next != NULL) {
os << temp->value;
temp = temp->next;
}
return os;
}
底部的代码正在打印肯定的链接列表,这是非常基本的。顶部是我尝试以相反的顺序打印否定列表的尝试,但是它不起作用,而且我不确定这是否是我应该这样做的方向。
答案 0 :(得分:3)
您可以创建类似以下的递归函数:
void print_list_reverse(LinkedListNode* current_node) {
if (current_node->next != NULL) print_list_reverse(current_node->next);
os << current_node->value;
}
这将继续进行直到到达列表末尾,并在返回的途中打印每个值。
请记住,如果您的列表太大,则可能会中断。