1+ package LinkedList ;
2+
3+ import java .util .LinkedList ;
4+
5+ public class DesignBrowserHistory1472 {
6+
7+ int currentPosition ;
8+ LinkedList <String > list ;
9+
10+ public DesignBrowserHistory1472 (String homepage ) {
11+ list = new LinkedList <>();
12+ list .add (homepage );
13+ currentPosition = 0 ;
14+ }
15+
16+ public void visit (String url ) {
17+ // first clearing forward history
18+ for (int i = currentPosition + 1 ; i < list .size (); i ++) {
19+ list .remove (i );
20+ }
21+ list .add (url );
22+ currentPosition ++;
23+ }
24+
25+ public String back (int steps ) {
26+ while (steps != 0 && currentPosition > 0 ) {
27+ currentPosition --;
28+ steps --;
29+ }
30+ return list .get (currentPosition );
31+ }
32+
33+ public String forward (int steps ) {
34+ int count = 0 ;
35+ while (count != steps && currentPosition < list .size () - 1 ) {
36+ count ++;
37+ currentPosition ++;
38+ }
39+
40+ return list .get (currentPosition );
41+ }
42+ }
43+
44+ /**
45+ * Your BrowserHistory object will be instantiated and called as such:
46+ *
47+ * DesignBrowserHistory1472 obj = new DesignBrowserHistory1472(homepage);
48+ *
49+ * obj.visit(url);
50+ *
51+ * String param_2 = obj.back(steps);
52+ *
53+ * String param_3 = obj.forward(steps);
54+ *
55+ * Input:
56+ *
57+ * ["BrowserHistory","visit","visit","visit","back","back","forward","visit","forward","back","back"]
58+ *
59+ * [["leetcode.com"],["google.com"],["facebook.com"],["youtube.com"],[1],[1],[1],["linkedin.com"],[2],[2],[7]]
60+ *
61+ * Output:
62+ *
63+ * [null,null,null,null,"facebook.com","google.com","facebook.com",null,"linkedin.com","google.com","leetcode.com"]
64+ *
65+ * Explanation:
66+ *
67+ * BrowserHistory browserHistory = new BrowserHistory("leetcode.com");
68+ *
69+ * browserHistory.visit("google.com"); // You are in "leetcode.com". Visit
70+ * "google.com"
71+ *
72+ * browserHistory.visit("facebook.com"); // You are in "google.com". Visit
73+ * "facebook.com"
74+ *
75+ * browserHistory.visit("youtube.com"); // You are in "facebook.com". Visit
76+ * "youtube.com"
77+ *
78+ * browserHistory.back(1); // You are in "youtube.com", move back to
79+ * "facebook.com" return "facebook.com"
80+ *
81+ * browserHistory.back(1); // You are in "facebook.com", move back to
82+ * "google.com" return "google.com"
83+ *
84+ * browserHistory.forward(1); // You are in "google.com", move forward to
85+ * "facebook.com" return "facebook.com"
86+ *
87+ * browserHistory.visit("linkedin.com"); // You are in "facebook.com". Visit
88+ * "linkedin.com"
89+ *
90+ * browserHistory.forward(2); // You are in "linkedin.com", you cannot move
91+ * forward any steps.
92+ *
93+ * browserHistory.back(2); // You are in "linkedin.com", move back two steps to
94+ * "facebook.com" then to "google.com". return "google.com"
95+ *
96+ * browserHistory.back(7); // You are in "google.com", you can move back only
97+ * one step to "leetcode.com". return "leetcode.com"
98+ *
99+ */
100+
101+ /* failed test case -
102+
103+ ["BrowserHistory","visit","forward","forward","visit","visit","back","visit","visit","forward","back","visit","visit","visit","forward","forward","visit","visit","back","visit","forward","visit","visit","visit","back"]
104+ [["jrbilt.com"],["uiza.com"],[3],[3],["fveyl.com"],["hyhqfqf.com"],[3],["cccs.com"],["bivz.com"],[6],[1],["cmbw.com"],["iywwwfn.com"],["sktbhdx.com"],[8],[10],["bskj.com"],["thw.com"],[6],["hgesj.com"],[6],["ctb.com"],["fllnc.com"],["fs.com"],[7]]
105+
106+
107+ ["BrowserHistory","visit","visit","visit","back","back","forward","visit","forward","back","back"]
108+ [["leetcode.com"],["google.com"],["facebook.com"],["youtube.com"],[5],[1],[1],["linkedin.com"],[2],[2],[7]]*/
0 commit comments