1472. Design Browser History #
题目 #
现有一个只支持单个标签页的 浏览器, 最开始浏览的网页是 homepage,可以访问其他的网站 url,也可以在浏览器中后退 steps 步或前进 steps 步。
设计实现 BrowserHistory 类:
BrowserHistory(string homepage)用homepage初始化浏览器类。void visit(string url)从当前页面跳转访问url对应的页面。执行此操作会把浏览历史前进的记录全部删除。string back(int steps)在浏览历史中后退steps步。如果只能在浏览历史中后退至多x步且steps > x,那么只后退x步。请返回后退至多steps步以后的url。string forward(int steps)在浏览历史中前进steps步。如果只能在浏览历史中前进至多x步且steps > x,那么只前进x步。请返回前进至多steps步以后的url。
思路 #
- 借助双向链表实现。
- 注意
visit操作执行后会将浏览历史前进的记录全部删除。
代码 #
class BrowserHistory {
private class ListNode {
public String url;
public ListNode prev;
public ListNode next;
ListNode(String url, ListNode prev, ListNode next) {
this.url = url;
this.prev = prev;
this.next = next;
}
}
private ListNode head;
private ListNode ptr;
public BrowserHistory(String homepage) {
this.head = new ListNode(homepage, null, null);
this.head.next = this.head.prev = this.head;
this.ptr = head;
}
public void visit(String url) {
this.ptr.next = new ListNode(url, this.ptr, this.head);
this.head.prev = this.ptr.next;
this.ptr = this.ptr.next;
}
public String back(int steps) {
for (int i=0; i<steps; i++) {
if (this.ptr == this.head) return this.ptr.url;
else this.ptr = this.ptr.prev;
}
return this.ptr.url;
}
public String forward(int steps) {
for (int i=0; i<steps; i++) {
if (this.ptr.next == this.head) return this.ptr.url;
else this.ptr = this.ptr.next;
}
return this.ptr.url;
}
}