LeetCode Algorithm 1472. 设计浏览器历史记录

题目链接:1472. 设计浏览器历史记录

Ideas

算法:双栈
数据结构:栈
思路:这明明是一道栈的题目,不知道为啥LeetCode给标成了链表的题目。
可以利用两个栈来实现,一个栈backend用来存储访问历史,另外一个也用来存储访问历史,
咳咳,开个玩笑,另外一个栈frontend用来存储前进历史。
什么是前进历史呢,就是当我们执行一次back操作时,将backend栈的栈顶元素弹出,然后塞入frontend栈,这样再执行forward操作时才能找到之前弹出的历史。

  1. visit:将当前页面链接塞入backend栈,然后跳转到新的链接,注意跳转后要将frontend栈内元素清空;
  2. back:弹出stepsbackend栈顶元素,如果栈为空则停止,弹出的元素主义塞入frontend栈;
  3. forward:弹出stepsfrontend栈顶元素,如果栈为空则停止,弹出的元素主义塞入backend栈;

Code

C++

class BrowserHistory {
    
    
private:
    stack<string> backend;
    stack<string> frontend;
    string curUrl;
public:
    BrowserHistory(string homepage) {
    
    
        this->curUrl = homepage;
    }
    
    void visit(string url) {
    
    
        this->backend.push(this->curUrl);
        this->curUrl = url;
        while (!this->frontend.empty()) this->frontend.pop();
    }
    
    string back(int steps) {
    
    
        while (steps-- && !this->backend.empty()) {
    
    
            this->frontend.push(this->curUrl);
            this->curUrl = this->backend.top();
            this->backend.pop();
        }
        return this->curUrl;
    }
    
    string forward(int steps) {
    
    
        while (steps-- && !this->frontend.empty()) {
    
    
            this->backend.push(this->curUrl);
            this->curUrl = this->frontend.top();
            this->frontend.pop();
        }
        return this->curUrl;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_43336281/article/details/126254046