文章目录
- Part.I Attention
 - Part.II Funciton
 - Part.III Code
 
Part.I Attention

- deque 是 double-ended queue 的缩写,意即双端队列,详细信息参见官网。
 deque<T>容器适配器是- 必须要包含头文件
#include <deque> deque相较于vector:①它不擅长在中间添加删除元素;②它擅长在队列头部和尾部添加删除元素,时间复杂度为O(1),而vector只有在尾部添加删除元素的时间复杂度才为O(1)。deque相较于queue:queue只擅长在头部删除元素,在尾部添加元素;而deque在头部和尾部都擅长添加或删除元素。
Part.II Funciton
deque 的函数相较于queue 就多很多了,和Vector相当,如下图:

下面是对常用函数的说明:
| 函数 | 解释 | 
|---|---|
begin() | 开始的迭代器 | 
end() | 结束的迭代器 | 
rbegin() | 反向开始的迭代器 | 
rend() | 反向结束的迭代器 | 
size() | 所含元素个数 | 
max_size | 最大能容纳的元素个数 | 
resize() | 重新调整其大小 | 
empty() | 判断其是否是空的 | 
front() | 最前面的元素 | 
back() | 最后面的元素 | 
assign() | 可用它通过数组来对其进行赋值 | 
push_back() | 在双端队列后面添加元素 | 
push_front() | 在双端队列前面添加元素 | 
pop_back() | 弹出双端队列最后一个元素 | 
pop_front() | 弹出双端队列最前面一个元素 | 
insert() | 插入元素,有好几种用法 | 
erase(d.begin(),d.begin()+3) | 删除前面3个元素 | 
a.swap(b) | 交换a和b | 
clear() | 清空所有元素 | 
emplace(itr,a) | 在迭代器itr位置前插入元素a,返回a的迭代器 | 
emplace_front() | 在前面插入元素 | 
emplace_back() | 在后面插入元素 | 
Part.III Code
LeetCode 的剑指 Offer II 026. 重排链表 就可以用双端队列来解决,下面是笔者所写的代码。
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    void reorderList(ListNode* head) {
        deque<ListNode*> dqu;
        while(head) {
            dqu.emplace_back(head);
            head=head->next;
        }
        ListNode* pre=nullptr;
        while(dqu.size()>=2) {
            if(!pre) {
                pre=dqu.front();
            }
            else {
                pre->next=dqu.front();
                pre=pre->next;
            }
            pre->next=dqu.back();
            pre=pre->next;
            dqu.pop_front();dqu.pop_back();
        }
        if(!dqu.empty()) {
            if(!pre) pre=dqu.front();
            else {
                pre->next=dqu.front();
                pre=pre->next;
            }
        }
        pre->next=nullptr;
    }
};
 
可以作为一个使用双端队列的示例,但是对于此题,使用双端队列并不一定是最优解。

















![[数据结构]:07-二叉树(无头结点)(C语言实现)](https://img-blog.csdnimg.cn/c03810c0ee5a4796b7c06d9dd88cdce8.png)

