题目的主要信息:
- 交替弹出队首队尾元素
具体做法:
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; //交替
}
}
}
}
复杂度分析:
- 时间复杂度:,其中为队列长度,每个元素都会被弹出来
- 空间复杂度:,队列长度为