2017-02-27 60 views
-1

我需要遍歷堆棧直到它爲空,並將每個元素添加到隊列中。然後做相反的事情。遍歷隊列中,直到它是空的,將每個元素返回到堆棧僅在Java中使用隊列來反轉堆棧?

public class Q1 { 

    public static void reverseStack(Stack st){ 
    } 
} 

這裏是我的測試:

public class Q1Test { 

    @Test 
    public void testQ1() { 
     Stack st = new Stack(5); 
     st.push("A"); 
     st.push("B"); 
     Q1.reverseStack(st); 
     assertEquals("A",(String) st.top()); 
    } 
} 

我一直在努力做的Q1代碼,從來沒有得到它的成功並總是最終失敗。任何人都可以實施上述的方法來使Q1測試成功嗎?

+1

「從來沒有得到它的成功,並最終總是失敗」 - 你的方法是空的。看起來不像你嘗試過任何東西。你會得到什麼結果? – duffymo

+0

public static void reverseStack(Stack st){if(!st.isEmpty()){ Object curr = st.pop(); reverseStack(st); st.push(curr); –

+0

啊,遞歸嘗試。不過,在我看來,這將導致與以前相同的順序。如果你的籌碼堆頂部有B,那麼你將B拿出來,倒轉它下面的東西,然後再把B放回頂部。 –

回答

0

這裏是一個工作示例:

Q1.java

import java.util.ArrayList; 
import java.util.List; 

public class Q1 { 

    private List<String> list; 

    public Q1() { 
     list = new ArrayList<String>(); 
    } 

    public String pop_front() { 
     if (!list.isEmpty()) { 
      String front = list.get(0);  
      for (int i = 0; i < list.size()-1; i++) { 
       list.set(i, list.get(i+1)); 
      } 
      list.remove(list.size()-1); 
       return front; 
     } else { 
      return null; 
     } 
    } 

    public void push_back(String obj) { 
     list.add(obj); 
    } 

    public String front() { 
     if (!list.isEmpty()) { 
      return list.get(0); 
     } else { 
      return null; 
     } 
    } 

    public boolean isEmpty() { 
     return list.isEmpty(); 
    } 

    public static void reverseStack(Stack stack) { 
     Q1 queue = new Q1(); 
     while (!stack.isEmpty()) { 
      queue.push_back(stack.pop()); 
     } 
     while (!queue.isEmpty()) { 
      stack.push(queue.pop_front()); 
     } 
    } 
} 

甲Stack類:

Stack.java

package com.dub; 


    import java.util.ArrayList; 
    import java.util.List; 

    public class Stack { 

     private List<String> list; 

     public Stack() { 
      list = new ArrayList<String>(); 
     } 

     public String pop() { 
      if (!list.isEmpty()) { 
       String top = list.get(list.size()-1); 

       list.remove(list.size()-1); 

       return top; 
      } else { 
       return null; 
      } 
     } 

     public void push(String obj) { 
      list.add(obj); 
     } 

     public String top() { 
      if (!list.isEmpty()) { 
       return list.get(list.size()-1); 
      } else { 
       return null; 
      } 
     } 

     public boolean isEmpty() { 
      return list.isEmpty(); 
     } 

    } 

現在的測試方法:

public static void main(String[] args) { 

    Stack stack = new Stack(); 

    stack.push("A"); 
    stack.push("B"); 
    stack.push("C"); 

    System.out.println("top: " + stack.top()); 

    Q1.reverseStack(stack); 

    System.out.println("top: " + stack.top()); 

} 

它打印預期:

頂部:C

頂部:一個