Skip to content

Commit 9c06678

Browse files
authored
Create 1472-design-browser-history.kt
1 parent e5f5589 commit 9c06678

File tree

1 file changed

+84
-0
lines changed

1 file changed

+84
-0
lines changed

kotlin/1472-design-browser-history.kt

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
/*
2+
* Using an ArrayList
3+
*/
4+
class BrowserHistory(homepage: String) {
5+
6+
val history = ArrayList<String>()
7+
var size = 0
8+
var index = 0
9+
10+
init {
11+
history.add(homepage)
12+
size = 1
13+
}
14+
15+
fun visit(url: String) {
16+
if(history.size < index + 2)
17+
history.add(url)
18+
else
19+
history[index + 1] = url
20+
index++
21+
size = index + 1
22+
}
23+
24+
fun back(steps: Int): String {
25+
index = maxOf(index - steps, 0)
26+
return history[index]
27+
}
28+
29+
fun forward(steps: Int): String {
30+
index = minOf(index + steps, size - 1)
31+
return history[index]
32+
}
33+
}
34+
35+
/*
36+
* Using a Doubly-LinkedList
37+
*/
38+
class BrowserNode(val page: String) {
39+
var next: BrowserNode? = null
40+
var prev: BrowserNode? = null
41+
}
42+
43+
class BrowserHistory(homepage: String) {
44+
45+
var current: BrowserNode? = null
46+
47+
init {
48+
current = BrowserNode(homepage)
49+
}
50+
51+
fun visit(url: String) {
52+
val temp = BrowserNode(url)
53+
current?.next = temp
54+
temp.prev = current
55+
current = current?.next
56+
}
57+
58+
fun back(steps: Int): String {
59+
var stepsTaken = 0
60+
while(current?.prev != null && stepsTaken < steps) {
61+
current = current?.prev
62+
stepsTaken++
63+
}
64+
return current!!.page
65+
}
66+
67+
fun forward(steps: Int): String {
68+
var stepsTaken = 0
69+
while(current?.next != null && stepsTaken < steps) {
70+
current = current?.next
71+
stepsTaken++
72+
}
73+
return current!!.page
74+
}
75+
76+
}
77+
78+
/**
79+
* Your BrowserHistory object will be instantiated and called as such:
80+
* var obj = BrowserHistory(homepage)
81+
* obj.visit(url)
82+
* var param_2 = obj.back(steps)
83+
* var param_3 = obj.forward(steps)
84+
*/

0 commit comments

Comments
 (0)