![](/img/trans.png)
[英]How can I implement this recursive algorithm to toggle some values on and off depending on their parent's value in a hierarchy
[英]how can I create a recursive algorithm that reverses the order of the values stored in the queue?
如何創建一個名為 reverse(Q) 的遞歸算法,它在僅使用 enqueue、dequeue、isEmpty 的同時反轉存儲在隊列中的值的順序? 這些是我用來操縱隊列的唯一操作。 我不能使用任何類型的循環,並且不創建任何額外的數據結構?
問:2 4 6 8 10 12 --------> 反向隊列:12 10 8 6 4 2
我該怎么做?
如果你使用 Java 庫中的 Dequeue class ,那么你可以像下面這樣繼續:
private static void reverse(Deque<Integer> q)
{
if(!q.isEmpty()) {
System.out.print(q.pollLast()+" ");
reverse(q);
}
}
您將希望遞歸 function 首先將前面的元素從隊列中彈出並在重新插入元素之前再次調用自身。 這樣,第一個實際重新插入其新彈出元素的遞歸調用是最后一個。
import java.util.concurrent.ArrayBlockingQueue;
import java.util.Queue;
class Main {
public static void main(String[] args) {
Queue<Integer> q = new ArrayBlockingQueue<>(100); // 100 is the queue's capacity
q.add(1);
q.add(2);
q.add(3);
q.add(4);
Main.reverse(q);
while (q.peek() != null) {
System.out.println(q.remove());
}
}
public static <T> void reverse(Queue<T> q) {
if (q.peek() == null) {
return;
}
T val = q.remove();
reverse(q);
q.add(val);
}
}
Output
4
3
2
1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.