66.颠倒栈。
题目:用递归颠倒一个栈。例如输入栈{1, 2, 3, 4, 5},1在栈顶。
颠倒之后的栈为{5, 4, 3, 2, 1},5处在栈顶。
VB.NET codes as below:
Module Module1
Sub Main()
Dim myStack = New Stack(Of Integer)
myStack.Push(1)
myStack.Push(2)
myStack.Push(3)
myStack.Push(4)
myStack.Push(5)
myStack.Push(6)
myStack.Push(7)
myStack.Push(8)
myStack.Push(9)
myStack = ReserveStack(myStack)
For Each item In myStack
Console.WriteLine(item)
Next
Console.ReadKey()
End Sub
Public Function ReserveStack(Of T)(ByVal currentStack As Stack(Of T)) As Stack(Of T)
If currentStack.Count > 1 Then
Dim lastItem As T = GetLastItem(Of T)(currentStack)
ReserveStack(currentStack)
currentStack.Push(lastItem)
End If
Return currentStack
End Function
Private Function GetLastItem(Of T)(ByVal currentStack As Stack(Of T)) As T
Dim lastItem As T
If Not currentStack.Count = 1 Then
Dim item As T = currentStack.Pop()
lastItem = GetLastItem(currentStack)
currentStack.Push(item)
Else
Return currentStack.Pop()
End If
Return lastItem
End Function
End Module