/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
try {
// your code goes here
SStack<String> stack = new SStack();
boolean threwException;
threwException = false;
try {
stack.peek();
}
{
threwException = true;
}
finally
{
if(!threwException)
{
System.
out.
println("peek for empty is broken"); }
}
threwException = false;
try {
stack.pop();
}
{
threwException = true;
}
finally
{
if(!threwException)
{
System.
out.
println("pop for empty is broken"); }
}
stack.push(one);
assertTrue(stack.pop().equals(one));
threwException = false;
try {
stack.pop();
}
{
threwException = true;
}
finally
{
if(!threwException)
{
System.
out.
println("pop does not remove objects"); }
}
stack.push(one);
stack.push(one);
assertTrue(stack.pop().equals(one));
assertTrue(stack.pop().equals(one));//duplicate object test
stack.push(one);
stack.push(two);
stack.push(three);
assertTrue(stack.pop().equals(three), three);
assertTrue(stack.pop().equals(two), two);
assertTrue(stack.pop().equals(one), one);//in order test
stack.push(one);
stack.push(two);
assertTrue(stack.pop().equals(two), two);
stack.push(three);
assertTrue(stack.peek().equals(three), three); //peek test
assertTrue(stack.pop().equals(three), three);
assertTrue(stack.pop().equals(one), one);//test for adding items after removing
{
System.
out.
println(e.
getMessage()); }
}
public static void assertTrue(boolean value){
if(!value){
}
}
public static void assertTrue
(boolean value,
String message
){ if(!value){
}
}
}
class SStack<T> {
private class Node {
private T data;
private Node prev, next;
public Node() {
}
public Node(T data) {
this.data = data;
}
}
private Node top;
public SStack() {
top = null;
}
public boolean empty() {
return top == null;
}
public T peek() {
if (top == null) {
}
return top.data;
}
public T pop() {
if (top == null) {
}
T value = top.data;
top = top.prev;
return value;
}
public T push(T data) {
Node temp = new Node(data);
if (top == null) {
top = temp;
} else {
top.next = temp;
temp.prev = top;
top = temp;
}
return temp.data;
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCXRyeSB7IAoJCQkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCgkJU1N0YWNrPFN0cmluZz4gc3RhY2sgPSBuZXcgU1N0YWNrKCk7CgkJYm9vbGVhbiB0aHJld0V4Y2VwdGlvbjsKCQl0aHJld0V4Y2VwdGlvbiA9IGZhbHNlOwoJCXRyeSB7CgkJCXN0YWNrLnBlZWsoKTsKCQl9CgkJY2F0Y2goRW1wdHlTdGFja0V4Y2VwdGlvbiBlKQoJCXsKCQkJdGhyZXdFeGNlcHRpb24gPSB0cnVlOwoJCX0KCQlmaW5hbGx5CgkJewoJCQlpZighdGhyZXdFeGNlcHRpb24pCgkJCXsKCQkJCVN5c3RlbS5vdXQucHJpbnRsbigicGVlayBmb3IgZW1wdHkgaXMgYnJva2VuIik7CgkJCX0KCQl9CgkJCgkJdGhyZXdFeGNlcHRpb24gPSBmYWxzZTsKCQl0cnkgewoJCQlzdGFjay5wb3AoKTsKCQl9CgkJY2F0Y2goRW1wdHlTdGFja0V4Y2VwdGlvbiBlKQoJCXsKCQkJdGhyZXdFeGNlcHRpb24gPSB0cnVlOwoJCX0KCQlmaW5hbGx5CgkJewoJCQlpZighdGhyZXdFeGNlcHRpb24pCgkJCXsKCQkJCVN5c3RlbS5vdXQucHJpbnRsbigicG9wIGZvciBlbXB0eSBpcyBicm9rZW4iKTsKCQkJfQoJCX0KCQlTdHJpbmcgb25lID0gIjEiOwoJCVN0cmluZyB0d28gPSAiMiI7CgkJU3RyaW5nIHRocmVlID0gIjMiOwoJCQoJCXN0YWNrLnB1c2gob25lKTsKCQlhc3NlcnRUcnVlKHN0YWNrLnBvcCgpLmVxdWFscyhvbmUpKTsKCQkKCQl0aHJld0V4Y2VwdGlvbiA9IGZhbHNlOwoJCXRyeSB7CgkJCXN0YWNrLnBvcCgpOwoJCX0KCQljYXRjaChFbXB0eVN0YWNrRXhjZXB0aW9uIGUpCgkJewoJCQl0aHJld0V4Y2VwdGlvbiA9IHRydWU7CgkJfQoJCWZpbmFsbHkKCQl7CgkJCWlmKCF0aHJld0V4Y2VwdGlvbikKCQkJewoJCQkJU3lzdGVtLm91dC5wcmludGxuKCJwb3AgZG9lcyBub3QgcmVtb3ZlIG9iamVjdHMiKTsKCQkJfQoJCX0KCQkKCQlzdGFjay5wdXNoKG9uZSk7CgkJc3RhY2sucHVzaChvbmUpOwoJCWFzc2VydFRydWUoc3RhY2sucG9wKCkuZXF1YWxzKG9uZSkpOwoJCWFzc2VydFRydWUoc3RhY2sucG9wKCkuZXF1YWxzKG9uZSkpOy8vZHVwbGljYXRlIG9iamVjdCB0ZXN0CgkJCgkJc3RhY2sucHVzaChvbmUpOwoJCXN0YWNrLnB1c2godHdvKTsKCQlzdGFjay5wdXNoKHRocmVlKTsKCQkKCQlhc3NlcnRUcnVlKHN0YWNrLnBvcCgpLmVxdWFscyh0aHJlZSksIHRocmVlKTsKCQlhc3NlcnRUcnVlKHN0YWNrLnBvcCgpLmVxdWFscyh0d28pLCB0d28pOwoJCWFzc2VydFRydWUoc3RhY2sucG9wKCkuZXF1YWxzKG9uZSksIG9uZSk7Ly9pbiBvcmRlciB0ZXN0CgkJCgkJc3RhY2sucHVzaChvbmUpOwoJCXN0YWNrLnB1c2godHdvKTsKCQkKCQlhc3NlcnRUcnVlKHN0YWNrLnBvcCgpLmVxdWFscyh0d28pLCB0d28pOwoJCQoJCXN0YWNrLnB1c2godGhyZWUpOwoJCWFzc2VydFRydWUoc3RhY2sucGVlaygpLmVxdWFscyh0aHJlZSksIHRocmVlKTsgLy9wZWVrIHRlc3QKCQlhc3NlcnRUcnVlKHN0YWNrLnBvcCgpLmVxdWFscyh0aHJlZSksIHRocmVlKTsKCQkKCQlhc3NlcnRUcnVlKHN0YWNrLnBvcCgpLmVxdWFscyhvbmUpLCBvbmUpOy8vdGVzdCBmb3IgYWRkaW5nIGl0ZW1zIGFmdGVyIHJlbW92aW5nCgkJfSBjYXRjaChFeGNlcHRpb24gZSkKCQl7CgkJCVN5c3RlbS5vdXQucHJpbnRsbihlLmdldE1lc3NhZ2UoKSk7CgkJfQoJfQoJCglwdWJsaWMgc3RhdGljIHZvaWQgYXNzZXJ0VHJ1ZShib29sZWFuIHZhbHVlKXsKCQlpZighdmFsdWUpewoJCQl0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJjb2RlIGlzIGJvcmsiKTsKCQl9Cgl9CglwdWJsaWMgc3RhdGljIHZvaWQgYXNzZXJ0VHJ1ZShib29sZWFuIHZhbHVlLCBTdHJpbmcgbWVzc2FnZSl7CgkJaWYoIXZhbHVlKXsKCQkJdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiY29kZSBpcyBib3JrOiAiK21lc3NhZ2UpOwoJCX0KCX0KfQoKY2xhc3MgU1N0YWNrPFQ+IHsKCiAgICBwcml2YXRlIGNsYXNzIE5vZGUgewoKICAgICAgICBwcml2YXRlIFQgZGF0YTsKICAgICAgICBwcml2YXRlIE5vZGUgcHJldiwgbmV4dDsKCiAgICAgICAgcHVibGljIE5vZGUoKSB7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgTm9kZShUIGRhdGEpIHsKICAgICAgICAgICAgdGhpcy5kYXRhID0gZGF0YTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBOb2RlIHRvcDsKCiAgICBwdWJsaWMgU1N0YWNrKCkgewogICAgICAgIHRvcCA9IG51bGw7CiAgICB9CgogICAgcHVibGljIGJvb2xlYW4gZW1wdHkoKSB7CiAgICAgICAgcmV0dXJuIHRvcCA9PSBudWxsOwogICAgfQoKICAgIHB1YmxpYyBUIHBlZWsoKSB7CiAgICAgICAgaWYgKHRvcCA9PSBudWxsKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFbXB0eVN0YWNrRXhjZXB0aW9uKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0b3AuZGF0YTsKICAgIH0KCiAgICBwdWJsaWMgVCBwb3AoKSB7CiAgICAgICAgaWYgKHRvcCA9PSBudWxsKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFbXB0eVN0YWNrRXhjZXB0aW9uKCk7CiAgICAgICAgfQogICAgICAgIFQgdmFsdWUgPSB0b3AuZGF0YTsKICAgICAgICB0b3AgPSB0b3AucHJldjsKICAgICAgICByZXR1cm4gdmFsdWU7CiAgICB9CgogICAgcHVibGljIFQgcHVzaChUIGRhdGEpIHsKICAgICAgICBOb2RlIHRlbXAgPSBuZXcgTm9kZShkYXRhKTsKICAgICAgICBpZiAodG9wID09IG51bGwpIHsKICAgICAgICAgICAgdG9wID0gdGVtcDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0b3AubmV4dCA9IHRlbXA7CiAgICAgICAgICAgIHRlbXAucHJldiA9IHRvcDsKICAgICAgICAgICAgdG9wID0gdGVtcDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRlbXAuZGF0YTsKICAgIH0KfQ==