> For the complete documentation index, see [llms.txt](https://hao-fu-1.gitbook.io/oj/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hao-fu-1.gitbook.io/oj/array_and_numbers/ni-tui-shou-pai.md).

# 逆推手牌

扑克牌发一张并把当前的放到堆底，通过牌桌上牌出现的顺序逆推手牌原始顺序。从最后发的牌N-1开始，倒退的上一步是N-1被放置堆底，手牌里还是只有N-1；再上一步是发N-2，倒退这步就是把N-2放到N-1前面；再上一步是置堆底，逆推回原状态也就是把N-1放到N-2前，依此类推每次是插入到首元素，然后把尾元素置顶。如此直到第一个元素0，它没有经历过置底过程，直接break。

```
#include <iostream>
#include <deque>
#include <vector>
using namespace std;
class Solution {
public:
    vector<int> rollback(vector<int> &nums) {
        deque<int> res;
        for (int i = nums.size() - 1; i >= 0; --i) {
            res.push_front(nums[i]);
            if (i == 0) break;
            const auto b = res.back();
            res.pop_back();
            res.push_front(b);
        }
        return vector<int>(res.begin(), res.end());
    }

};

int main() {
    vector<int> nums = {1, 3, 5, 4, 2};
    Solution sol;
    for (const auto i : sol.rollback(nums)) cout << i << ", ";
}
```
