package main
import (
"container/list"
"errors"
"fmt"
)
// Stack is a list that can only perform two operations: push and pop
type Stack struct {
items list.List
}
// push() method inserts new element at the top of the stack
func (stack *Stack) push(str string) {
stack.items.PushBack(str)
}
// pop() method removes the element at the top of the stack
func (stack *Stack) pop() (string, error) {
if stack.items.Back() == nil {
return "", errors.New("Empty")
}
lastVal := stack.items.Back().Value.(string) // get the value of last element
stack.items.Remove(stack.items.Back()) // remove the last element
return lastVal, nil
}
func main() {
stack := &Stack{}
stack.push("1")
stack.push("2")
fmt.Println(stack.pop())
fmt.Println(stack.pop())
fmt.Println(stack.pop())
}