Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Stack
- class EmptyError < StandardError
- end
- class Node
- attr_accessor :prev, :data
- def initialize(prev, data)
- @prev = prev
- @data = data
- end
- end
- def initialize
- @cur = nil
- end
- def empty?
- @cur.nil?
- end
- def push(val)
- if @cur
- new = Node.new(@cur, val)
- @cur = new
- else
- @cur = Node.new(nil, val)
- end
- val
- end
- def pop
- raise EmptyError if empty?
- popped = @cur
- @cur = @cur.prev
- popped.data
- end
- def size
- count(@cur, 0)
- end
- private
- def count(node, memo)
- return memo if node.nil?
- if node.prev
- count(node.prev, memo+1)
- else
- memo + 1
- end
- end
- end
Add Comment
Please, Sign In to add comment