题目 逆序一个栈, 且不能使用额外的数据结构, 只可使用递归函数
题解 可将问题分为两个步骤:
弹出栈底元素并返回
获取栈底元素并将其放回栈顶
Java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 public class ReverseStackUsingRecursive { public static void reverse (Stack<Integer> stack) { if (stack.isEmpty()) return ; int ele = getAndRemoveLastElement(stack); reverse(stack); stack.push(ele); } public static int getAndRemoveLastElement (Stack<Integer> stack) { int result = stack.pop(); if (stack.isEmpty()) { return result; } else { int last = getAndRemoveLastElement(stack); stack.push(result); return last; } } }
Python 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 def reverse (stack ): if not stack or len (stack) == 0 : return ele = get_and_remove_last_element(stack) reverse(stack) stack.append(ele) def get_and_remove_last_element (stack ): result = stack.pop() if len (stack) == 0 : return result else : last = get_and_remove_last_element(stack) stack.append(result) return last
Go 若不使用指针的指针则需注意引用传递, 否则会由于 stack 数组不更新进入死循环
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 func reverse (stack []int ) { if stack == nil || len (stack) == 0 { return } ele, stack := getAndRemoveLastElement(stack) reverse(stack) stack = append (stack, ele) } func getAndRemoveLastElement (stack []int ) (int , []int ) { result := stack[len (stack)-1 ] stack = stack[:len (stack)-1 ] if len (stack) == 0 { return result, stack } else { last, stack := getAndRemoveLastElement(stack) stack = append (stack, result) return last, stack } }