簡體   English   中英

如何創建一個遞歸算法來反轉存儲在隊列中的值的順序?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM