打印反向链接列表

时间:2018-11-06 21:04:06

标签: c++

我正在尝试打印数字行的问题。我有一个包含两个链接列表的对象。一个列表是正数(包括零),而一个链接列表是负数(从-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;

}

底部的代码正在打印肯定的链接列表,这是非常基本的。顶部是我尝试以相反的顺序打印否定列表的尝试,但是它不起作用,而且我不确定这是否是我应该这样做的方向。

1 个答案:

答案 0 :(得分:3)

您可以创建类似以下的递归函数:

void print_list_reverse(LinkedListNode* current_node) {
    if (current_node->next != NULL) print_list_reverse(current_node->next);
    os << current_node->value;
}

这将继续进行直到到达列表末尾,并在返回的途中打印每个值。

请记住,如果您的列表太大,则可能会中断。