#include <bits/stdc++.h>
using namespace std;
struct Node {
string url;
Node* pre;
Node( string u)
{
url = u;
pre = nullptr;
}
} ;
class BrowserHis
{
private :
Node* current;
public :
BrowserHis( ) {
current = nullptr;
}
void visit( const string& url)
{
Node* newPage = new Node( url) ;
newPage- > pre = current;
current = newPage;
cout << "Visited: " << url << endl;
}
string back( ) {
if ( current ! = nullptr && current- > pre ! = nullptr)
{
current = current- > pre;
cout << "Going back to: " << current- > url << endl;
return current- > url;
}
else
{
cout << "Cannot go back further." << endl;
return "" ;
}
}
string getCurrentPage( ) const
{
if ( current ! = nullptr) return current- > url;
else return "No history." ;
}
// Giai phong bo nho
~BrowserHis( ) {
Node* tmp;
while ( current ! = nullptr)
{
tmp = current;
current = current- > pre;
delete tmp;
}
}
} ;
int main( ) {
BrowserHis his;
his.visit ( "google.com" ) ;
his.visit ( "facebook.com" ) ;
his.visit ( "youtube.com" ) ;
cout << "Current page: " << his.getCurrentPage ( ) << endl;
his.back ( ) ;
cout << "Current page: " << his.getCurrentPage ( ) << endl;
his.back ( ) ;
cout << "Current page: " << his.getCurrentPage ( ) << endl;
his.back ( ) ;
return 0 ;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IE5vZGUgewogICAgc3RyaW5nIHVybDsKICAgIE5vZGUqIHByZTsKICAgIE5vZGUoc3RyaW5nIHUpIAogICAgewogICAgICAgIHVybCA9IHU7CiAgICAgICAgcHJlID0gbnVsbHB0cjsKICAgIH0KfTsKCmNsYXNzIEJyb3dzZXJIaXMgCnsKcHJpdmF0ZToKICAgIE5vZGUqIGN1cnJlbnQ7CgpwdWJsaWM6CiAgICBCcm93c2VySGlzKCl7IAogICAgICAgIGN1cnJlbnQgPSBudWxscHRyOwogICAgfQoKICAgIHZvaWQgdmlzaXQoY29uc3Qgc3RyaW5nJiB1cmwpIAogICAgewogICAgICAgIE5vZGUqIG5ld1BhZ2UgPSBuZXcgTm9kZSh1cmwpOwogICAgICAgIG5ld1BhZ2UtPnByZSA9IGN1cnJlbnQ7CiAgICAgICAgY3VycmVudCA9IG5ld1BhZ2U7CiAgICAgICAgY291dCA8PCAiVmlzaXRlZDogIiA8PCB1cmwgPDwgZW5kbDsKICAgIH0KCiAgICBzdHJpbmcgYmFjaygpIHsKICAgICAgICBpZiAoY3VycmVudCAhPSBudWxscHRyICYmIGN1cnJlbnQtPnByZSAhPSBudWxscHRyKSAKICAgICAgICB7CiAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5wcmU7CiAgICAgICAgICAgIGNvdXQgPDwgIkdvaW5nIGJhY2sgdG86ICIgPDwgY3VycmVudC0+dXJsIDw8IGVuZGw7CiAgICAgICAgICAgIHJldHVybiBjdXJyZW50LT51cmw7CiAgICAgICAgfSAKICAgICAgICBlbHNlIAogICAgICAgIHsKICAgICAgICAgICAgY291dCA8PCAiQ2Fubm90IGdvIGJhY2sgZnVydGhlci4iIDw8IGVuZGw7CiAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICB9CgogICAgc3RyaW5nIGdldEN1cnJlbnRQYWdlKCkgY29uc3QgCiAgICB7CiAgICAgICAgaWYgKGN1cnJlbnQgIT0gbnVsbHB0cikgcmV0dXJuIGN1cnJlbnQtPnVybDsKICAgICAgICBlbHNlIHJldHVybiAiTm8gaGlzdG9yeS4iOwogICAgfQoKICAgIC8vIEdpYWkgcGhvbmcgYm8gbmhvCiAgICB+QnJvd3NlckhpcygpIHsKICAgICAgICBOb2RlKiB0bXA7CiAgICAgICAgd2hpbGUgKGN1cnJlbnQgIT0gbnVsbHB0cikgCiAgICAgICAgewogICAgICAgICAgICB0bXAgPSBjdXJyZW50OwogICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+cHJlOwogICAgICAgICAgICBkZWxldGUgdG1wOwogICAgICAgIH0KICAgIH0KfTsKCmludCBtYWluKCkgewogICAgQnJvd3NlckhpcyBoaXM7CiAgICBoaXMudmlzaXQoImdvb2dsZS5jb20iKTsKICAgIGhpcy52aXNpdCgiZmFjZWJvb2suY29tIik7CiAgICBoaXMudmlzaXQoInlvdXR1YmUuY29tIik7CgogICAgY291dCA8PCAiQ3VycmVudCBwYWdlOiAiIDw8IGhpcy5nZXRDdXJyZW50UGFnZSgpIDw8IGVuZGw7CgogICAgaGlzLmJhY2soKTsKICAgIGNvdXQgPDwgIkN1cnJlbnQgcGFnZTogIiA8PCBoaXMuZ2V0Q3VycmVudFBhZ2UoKSA8PCBlbmRsOwoKICAgIGhpcy5iYWNrKCk7CiAgICBjb3V0IDw8ICJDdXJyZW50IHBhZ2U6ICIgPDwgaGlzLmdldEN1cnJlbnRQYWdlKCkgPDwgZW5kbDsKCiAgICBoaXMuYmFjaygpOwoKICAgIHJldHVybiAwOwp9