我尝试从Internet搜索一种解决方案,但是找不到。
是否可以使用std::stack<Node* temp>
反向链接列表?如果可以,怎么办?
答案 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