主要任务
编写双端队列,能够addFirst, remove First, addLast, removeLast.并实现其他一些辅助功能。
使用两种数据结构来完成双端队列,分别是链表和数组。
要求这两种数据结构的add和remove操作都花费O(1)的时间,即与队列长度无关。
LinkedListDeque
主要思路见Week2中的双向链表。主要思路是:
- 循环链表与哨兵节点:在双向链表中设置一个哨兵节点,它的next永远指向第一个节点,pre永远指向最后一个节点(即使此时链表为空,只有它自己,那么next和pre就都指向自己)。
较为顺利,因为实现的结构与双向链表非常相似。
但递归实现get时,稍微遇到了一点问题,最后添加了一个辅助方法:
public T getRecursive(int index) {
if (index > size - 1) {
return null;
}
return getR(sentinel.next, index