// @leet start
type BrowserHistoryNode struct {
Url string
Back *BrowserHistoryNode
Forward *BrowserHistoryNode
}
type BrowserHistory struct {
CurrentPage *BrowserHistoryNode
}
func Constructor(homepage string) BrowserHistory {
var bs BrowserHistory
var home_page BrowserHistoryNode
home_page.Url = homepage
bs.CurrentPage = &home_page
return bs
}
func (this *BrowserHistory) Visit(url string) {
var page BrowserHistoryNode
page.Url = url
this.CurrentPage.Forward = &page
page.Back = this.CurrentPage
this.CurrentPage = &page
}
func (this *BrowserHistory) Back(steps int) string {
for range steps {
if this.CurrentPage.Back == nil {
break
}
this.CurrentPage = this.CurrentPage.Back
}
return this.CurrentPage.Url
}
func (this *BrowserHistory) Forward(steps int) string {
for range steps {
if this.CurrentPage.Forward == nil {
break
}
this.CurrentPage = this.CurrentPage.Forward
}
return this.CurrentPage.Url
}
/**
* Your BrowserHistory object will be instantiated and called as such:
* obj := Constructor(homepage);
* obj.Visit(url);
* param_2 := obj.Back(steps);
* param_3 := obj.Forward(steps);
*/
// @leet end