题目的主要信息:
- 交替弹出队首队尾元素
具体做法:
deque是双端队列,可以从队首弹出也可以从队尾弹出。
我们准备一个Boolean型的flag,一开始为true,每次为true就弹出队首元素,然后置为false,每次为false就弹出队尾元素,然后置为true,如此交替即可实现交替弹出队首队尾。
import java.util.ArrayDeque;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        ArrayDeque deque = new ArrayDeque();
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String name = scanner.next();
            // 初始化队列中的数据
            deque.offerLast(name);
        }
        Boolean flag = true; //表示奇偶,奇偶出队分别是首尾
        while(!deque.isEmpty()){ //队列没有人为止
            if(flag){ //弹队首
                System.out.println(deque.getFirst());
                deque.removeFirst();
                flag = false; //交替
            }else{ //弹队尾
                System.out.println(deque.getLast());
                deque.removeLast();
                flag = true; //交替
            } 
        }
    }
}
复杂度分析:
- 时间复杂度:,其中为队列长度,每个元素都会被弹出来
- 空间复杂度:,队列长度为

 京公网安备 11010502036488号
京公网安备 11010502036488号