深入浅出 (代码+图示)递归反转一个栈 lp 专题讲解

目标:递归反转一个栈,要求不得重新申请一个同样的栈,空间复杂度o(1)
博主说: 算法思想:汉诺塔的思想,非常复杂,玩过九连环的人都想得通的
C/C++ code
static void ReverseStack(ref Stack stack) { if (stack.Count == 0) return; object top = stack.Pop(); ReverseStack(ref stack); if (stack.Count == 0) { stack.Push(top); return; } object top2 = stack.Pop(); ReverseStack(ref stack);//p1 stack.Push(top); ReverseStack(ref stack);//p2 stack.Push(top2); }


请问两个问题:
第一个: 注释p1,p2两处的递归用来干什么?顺序可以点到吗?
第二个:如果做到只用一个堆栈就搞定反转的?

未命名图片 lp 2

原文地址:https://www.cnblogs.com/titer1/p/2690670.html