如何使用STL堆栈反向链接列表?

时间:2018-08-11 02:01:30

标签: c++ linked-list stl stack reverse

我尝试从Internet搜索一种解决方案,但是找不到。

是否可以使用std::stack<Node* temp>反向链接列表?如果可以,怎么办?

1 个答案:

答案 0 :(得分:3)

当然 有可能是一个堆栈。当您意识到以相反的顺序将元素 pop 从栈中弹出时,用于此类野兽的算法非常简单(因为这可能是类工作)上。

因此,您正在寻找类似这样的东西:

def reverseList (List<Type> &list):
    Stack<Type> stack
    while not list.empty():                   # 1 2 3 ... 9
        stack.push(list.getAndRemoveFirst())
    while not stack.empty():                  # 9 8 7 ... 1
        list.pushBack(stack.pop())

但是请记住,如果您是在“真实”的情况下(而不是课堂工作)这样做的,那么std::list实际上具有的功能,可以反转列表:

#include <iostream>
using std::cout;

#include <list>
using std::list;

int main () {
    list<int> lst;

    for (int val: {9, 5, 3, 5, 6, 2, 9, 5, 1, 4, 1, 3})
        lst.push_back(val);

    cout << "Original list:";
    for (const auto &item: lst)
        cout << ' ' << item;
    cout << '\n';

    lst.reverse();

    cout << "Reversed list:";
    for (const auto &item: lst)
        cout << ' ' << item;
    cout << '\n';

    cout << "\nReverse ITERATOR of\nreversed list:";
    for (auto iter = lst.crbegin(); iter != lst.crend(); ++iter)
        cout << ' ' << *iter;
    cout << '\n';
}

最后一部分显示了如果需要全部反向操作,如何以相反的顺序迭代。实际上,它不会更改列表的顺序,而只是允许您向后处理项目。

该代码的输出为:

Original list: 9 5 3 5 6 2 9 5 1 4 1 3
Reversed list: 3 1 4 1 5 9 2 6 5 3 5 9

Reverse ITERATOR of
reversed list: 9 5 3 5 6 2 9 5 1 4 1 3