實現(xiàn)一個棧的逆序,但是只能用遞歸函數(shù)和這個棧本身的pop操作來實現(xiàn),而不能自己申請另外的數(shù)據(jù)結(jié)構(gòu)。 給定一個整數(shù)數(shù)組A即為給定的棧,同時給定它的大小n,請返回逆序后的棧。 測試樣例: [4,3,2,1],4 返回:[1,2,3,4]
這道題考察的是棧的逆序,不借助新的數(shù)據(jù)結(jié)構(gòu)實現(xiàn)棧的翻轉(zhuǎn),利用兩個函數(shù),一個是得到棧最末尾元素的函數(shù)和翻轉(zhuǎn)函數(shù),想法是先得到最末尾的元素,之后將棧翻轉(zhuǎn),將最末尾的元素壓入棧即可。代碼如下
class StackReverse {public: vector<int> reverseStack(vector<int> A, int n) { if(n<=1) return A; stack<int> mystack; for(auto c:A) mystack.push(c); reversestack(mystack); for(int i=n-1;i!=-1;--i) { A[i]=mystack.top(); mystack.pop(); } return A; } void reversestack(stack<int> &my_stack) { int end=getend(my_stack); if(my_stack.empty()){ my_stack.push(end); return; } reversestack(my_stack); my_stack.push(end); } int getend(stack<int> &my_stack) { int res; int top=my_stack.top(); my_stack.pop(); if(my_stack.empty()) return top; else { res=getend(my_stack); my_stack.push(top); } return res; }};新聞熱點
疑難解答