Skip to content

Instantly share code, notes, and snippets.

@bstolte
Last active September 25, 2015 16:02
Show Gist options
  • Save bstolte/0b4b3abde3fa2a122839 to your computer and use it in GitHub Desktop.
Save bstolte/0b4b3abde3fa2a122839 to your computer and use it in GitHub Desktop.
Reversing a Linked List #1
class LinkedListNode
attr_accessor :value, :next_node
def initialize(value, next_node=nil)
@value = value
@next_node = next_node
end
end
def print_values(list_node)
print "#{list_node.value} --> "
if list_node.next_node.nil?
print "nil\n"
return
else
print_values(list_node.next_node)
end
end
class Stack
attr_reader :data
def initialize
@data = nil
end
def push(value)
@data = LinkedListNode.new(value, @data)
end
def pop
node = @data.value
@data = @data.next_node
return node
end
end
def reverse_list(list)
stack = Stack.new
while list
stack.push(list.value)
list = list.next_node
end
# return stack.data
# this would have worked but it didn't use the 'pop' method, so below includes using pop...
new_stack = Stack.new
while stack.data
new_stack.push(stack.pop)
end
stack = new_stack
reversed_list = nil
while stack.data
reversed_list = LinkedListNode.new(stack.pop, reversed_list)
end
return reversed_list
end
node1 = LinkedListNode.new(37)
node2 = LinkedListNode.new(99, node1)
node3 = LinkedListNode.new(12, node2)
print_values(node3)
puts "-------"
revlist = reverse_list(node3)
print_values(revlist)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment