我覺得有幾個問題,你的代碼:
- 你應該去,直到大小/ 2。您每次迭代都會彈出兩次。然後檢查長度是否奇數,如果是,則添加最後一個剩餘元素 。
- 我認爲你的代碼只能顛倒你的堆棧。
這不是測試,但我認爲它應該看起來像這樣(也冒昧地擺脫一些無用的變量 - 性能可能不是一個問題在這種情況下)。
讓你的方法返回一個堆棧,這樣使用它:
st = switchPairs(st);
而且方法體:
public Stack<Integer> switchPairs(Stack<Integer> st){
Stack<Integer> q = new Stack<Integer>();
for(int i = 0; i < st.size()-1; i++){
q.push(st.elementAt(i+1));
q.push(st.elementAt(i++)));
}
if(st.size()%2==1){
q.push(st.pop());
}
return q;
}
爲了保持無效(從Here採取使用)
AtomicReference<Stack<Integer>> ref = new AtomicReference<Stack<Integer>>(st);
switchPairs(ref);
st = ref.get();
而方法的主體:
public void switchPairs(AtomicReference<Stack<Integer>> ref){
Stack<Integer> q = new Stack<Integer>();
for(int i = 0; i < ref.get().size()-1; i++){
q.push(ref.get().elementAt(i+1));
q.push(ref.get().elementAt(i++)));
}
if(ref.get().size()%2==1){
q.push(ref.get().pop());
}
ref.set(q);
}
你認爲什麼是錯的?你總是以成對的方式進行操作,最後一個值應該放在哪裏?這應該給你例外,因爲堆棧在幾次迭代後是空的。 –