Skip to content

Commit 11d6bc2

Browse files
Merge pull request #2395 from Xceptions/browserhistory
Browser History Operations
2 parents 658a022 + fe60f2c commit 11d6bc2

File tree

1 file changed

+81
-0
lines changed

1 file changed

+81
-0
lines changed

BrowserHistory/backend.py

+81
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
class DLL:
2+
"""
3+
a doubly linked list that holds the current page,
4+
next page, and previous page.
5+
Used to enforce order in operations
6+
"""
7+
def __init__(self, val: str =None):
8+
self.val = val
9+
self.nxt = None
10+
self.prev = None
11+
12+
13+
class BrowserHistory:
14+
"""
15+
This class designs the operations of a browser history
16+
17+
It works by using a doubly linked list to hold the urls
18+
"""
19+
20+
def __init__(self, homepage: str):
21+
"""
22+
Returns - None
23+
Input - None
24+
----------
25+
- Initialize doubly linked list which will serve as the
26+
browser history and sets the current page
27+
"""
28+
self.head = DLL(homepage)
29+
self.curr = self.head
30+
31+
def visit(self, url: str) -> None:
32+
"""
33+
Returns - None
34+
Input - str
35+
----------
36+
- Adds the current url to the DLL
37+
- sets both the next and previous values
38+
"""
39+
url_node = DLL(url)
40+
self.curr.nxt = url_node
41+
url_node.prev = self.curr
42+
43+
self.curr = url_node
44+
45+
46+
def back(self, steps: int) -> str:
47+
"""
48+
Returns - str
49+
Input - int
50+
----------
51+
- Iterates through the DLL backwards `step` number of times
52+
- returns the appropriate value
53+
"""
54+
while steps > 0 and self.curr.prev:
55+
self.curr = self.curr.prev
56+
steps -= 1
57+
return self.curr.val
58+
59+
60+
def forward(self, steps: int) -> str:
61+
"""
62+
Returns - str
63+
Input - int
64+
----------
65+
- Iterates through the DLL forewards `step` number of times
66+
- returns the appropriate value
67+
"""
68+
while steps > 0 and self.curr.nxt:
69+
self.curr = self.curr.nxt
70+
steps -= 1
71+
return self.curr.val
72+
73+
74+
if __name__ == "__main__":
75+
obj = BrowserHistory("google.com")
76+
obj.visit("twitter.com")
77+
param_2 = obj.back(1)
78+
param_3 = obj.forward(1)
79+
80+
print(param_2)
81+
print(param_3)

0 commit comments

Comments
 (0)