Design Browser History — Doubly Linked List Implementation

Sanjeev SharmaSanjeev Sharma
2 min read

Advertisement

Problem 249 · Design Browser History

Difficulty: Hard · Pattern: Doubly Linked List Design

Implement: BrowserHistory(homepage), visit(url), back(steps), forward(steps).

Solutions

# Python — DLL
class Node:
    def __init__(self, url): self.url = url; self.prev = self.next = None

class BrowserHistory:
    def __init__(self, homepage):
        self.cur = Node(homepage)

    def visit(self, url):
        node = Node(url)
        self.cur.next = node; node.prev = self.cur
        self.cur = node  # forward history cut

    def back(self, steps):
        while steps > 0 and self.cur.prev:
            self.cur = self.cur.prev; steps -= 1
        return self.cur.url

    def forward(self, steps):
        while steps > 0 and self.cur.next:
            self.cur = self.cur.next; steps -= 1
        return self.cur.url
// Java
class BrowserHistory {
    class Node { String url; Node prev, next; Node(String u){url=u;} }
    Node cur;
    public BrowserHistory(String homepage) { cur = new Node(homepage); }
    public void visit(String url) {
        Node n = new Node(url); n.prev = cur; cur.next = n; cur = n;
    }
    public String back(int steps) {
        while (steps-->0 && cur.prev!=null) cur=cur.prev; return cur.url;
    }
    public String forward(int steps) {
        while (steps-->0 && cur.next!=null) cur=cur.next; return cur.url;
    }
}
// C++
class BrowserHistory {
    struct Node { string url; Node *prev=nullptr, *next=nullptr; Node(string u):url(u){} };
    Node* cur;
public:
    BrowserHistory(string homepage) { cur = new Node(homepage); }
    void visit(string url) {
        Node* n = new Node(url); n->prev=cur; cur->next=n; cur=n;
    }
    string back(int steps) {
        while(steps-->0 && cur->prev) cur=cur->prev; return cur->url;
    }
    string forward(int steps) {
        while(steps-->0 && cur->next) cur=cur->next; return cur->url;
    }
};

Complexity

  • visit: O(1)
  • back/forward: O(steps)
  • Space: O(n) history length

Advertisement

Sanjeev Sharma

Written by

Sanjeev Sharma

Full Stack Engineer · E-mopro