# This linked list reversal does not involve a stack, it simply #creates a new set of nodes that point the opposite direction. class LinkedListNode attr_accessor :value, :next_node def initialize(value, next_node=nil) @value = value @next_node = next_node end end def reverse_list(node, previous=nil) return if node.nil? @head = LinkedListNode.new(node.value, previous) reverse_list(node.next_node, @head) return @head end def print_values(node) print "#{node.value} --> " if node.next_node.nil? print "nil\n" return else print_values(node.next_node) end 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)