在 java 中反转堆栈
Reversing a stack in java
public static void reverse(Stack arr){
Queue<Integer> arrCopy=new LinkedList<Integer>();
while(!arr.empty()){
arrCopy.add((int)arr.pop());
};
System.out.print("{ ");
while(!arrCopy.isEmpty()){
System.out.print((int)arrCopy.remove() + ", ");
}
System.out.print("}");
}
所以,我有一个包含 10 个整数的堆栈,我想反向打印它。我编写了一个创建队列的新方法,每次它使用 pop 从堆栈中删除和 returns 一个整数时,它都会将其添加到队列中。问题是 while(!arrCopy.isEmpty())
似乎没有执行,队列是空的。这里有铸造问题吗?还是我向队列中添加元素的方式有问题?
谢谢!
编辑:
这是我的主要功能的代码(这是我的其余代码):
public static void main(String[] args) {
Random rand = new Random();
Stack<Integer> a=new Stack<Integer>();
for (int i=0; i<10; i++){
a.push(rand.nextInt(50));
}
System.out.print("{ ");
while(!a.empty()){
System.out.print((int)a.pop() + ", ");
}
System.out.print("}");
reverse(a);
}
解决方法:
我得到它的工作,谢谢!问题是我使用 pop 来 return (但删除)堆栈中的所有元素以便在反转它之前打印它,这导致堆栈为空。这就是我改变它的方式!
public static Queue reverse(Stack arr){
Queue<Integer> arrCopy=new LinkedList<Integer>();
while(!arr.empty()){
arrCopy.add((int)arr.pop());
}
return arrCopy;
}
public static void main(String[] args) {
Random rand = new Random();
Stack<Integer> a=new Stack<Integer>();
for (int i=0; i<10; i++){
a.push(rand.nextInt(50));
}
System.out.println("List:");
System.out.println(a);
System.out.println("Reversed List:");
System.out.println(reverse(a));
}
只需使用以下代码反转堆栈顺序即可。即颠倒顺序。
import java.util.Collections;
import java.util.Stack;
public class Test {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<>();
for (int i = 0; i < 10; i++) {
stack.push(i);
}
System.out.println("Before reverse" + stack);
reverse(stack);
}
public static void reverse(Stack<Integer> arr){
arr.sort(Collections.reverseOrder());
System.out.println("After reverse");
System.out.println(arr);
}
}
输出是:
Before reverse[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
After reverse
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
这里:
while(!a.empty()){
System.out.print((int)a.pop() + ", ");
}
System.out.print("}");
reverse(a);
您正在清空堆栈,然后再调用reverse
。如果您一直从堆栈中弹出元素直到 a.empty()
returns 为真,那么您已经清空了堆栈,并且您正在将一个空堆栈传递给 reverse
方法。
为什么不直接使用:
System.out.println(a);
reverse(a);
无需为了打印它们而从堆栈中弹出所有元素。
public static void reverse(Stack arr){
Queue<Integer> arrCopy=new LinkedList<Integer>();
while(!arr.empty()){
arrCopy.add((int)arr.pop());
};
System.out.print("{ ");
while(!arrCopy.isEmpty()){
System.out.print((int)arrCopy.remove() + ", ");
}
System.out.print("}");
}
所以,我有一个包含 10 个整数的堆栈,我想反向打印它。我编写了一个创建队列的新方法,每次它使用 pop 从堆栈中删除和 returns 一个整数时,它都会将其添加到队列中。问题是 while(!arrCopy.isEmpty())
似乎没有执行,队列是空的。这里有铸造问题吗?还是我向队列中添加元素的方式有问题?
谢谢!
编辑: 这是我的主要功能的代码(这是我的其余代码):
public static void main(String[] args) {
Random rand = new Random();
Stack<Integer> a=new Stack<Integer>();
for (int i=0; i<10; i++){
a.push(rand.nextInt(50));
}
System.out.print("{ ");
while(!a.empty()){
System.out.print((int)a.pop() + ", ");
}
System.out.print("}");
reverse(a);
}
解决方法: 我得到它的工作,谢谢!问题是我使用 pop 来 return (但删除)堆栈中的所有元素以便在反转它之前打印它,这导致堆栈为空。这就是我改变它的方式!
public static Queue reverse(Stack arr){
Queue<Integer> arrCopy=new LinkedList<Integer>();
while(!arr.empty()){
arrCopy.add((int)arr.pop());
}
return arrCopy;
}
public static void main(String[] args) {
Random rand = new Random();
Stack<Integer> a=new Stack<Integer>();
for (int i=0; i<10; i++){
a.push(rand.nextInt(50));
}
System.out.println("List:");
System.out.println(a);
System.out.println("Reversed List:");
System.out.println(reverse(a));
}
只需使用以下代码反转堆栈顺序即可。即颠倒顺序。
import java.util.Collections;
import java.util.Stack;
public class Test {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<>();
for (int i = 0; i < 10; i++) {
stack.push(i);
}
System.out.println("Before reverse" + stack);
reverse(stack);
}
public static void reverse(Stack<Integer> arr){
arr.sort(Collections.reverseOrder());
System.out.println("After reverse");
System.out.println(arr);
}
}
输出是:
Before reverse[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
After reverse
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
这里:
while(!a.empty()){
System.out.print((int)a.pop() + ", ");
}
System.out.print("}");
reverse(a);
您正在清空堆栈,然后再调用reverse
。如果您一直从堆栈中弹出元素直到 a.empty()
returns 为真,那么您已经清空了堆栈,并且您正在将一个空堆栈传递给 reverse
方法。
为什么不直接使用:
System.out.println(a);
reverse(a);
无需为了打印它们而从堆栈中弹出所有元素。