Skip to content

Instantly share code, notes, and snippets.

@lshapz
Created April 11, 2017 19:38
Show Gist options
  • Save lshapz/582a9ffadd5405b6d72f85c29c46cc62 to your computer and use it in GitHub Desktop.
Save lshapz/582a9ffadd5405b6d72f85c29c46cc62 to your computer and use it in GitHub Desktop.
Linked List related functions
class LinkedListNode
attr_accessor :value, :next_node, :list
def initialize(value, next_node=nil)
@value = value
@list = []
@next_node = next_node
end
def print
p @value
if @next_node
@next_node.print
end
end
def numberify(node, array=@list)
array.push(self.value)
if @next_node
@next_node.numberify(self, array)
end
end
def reverse_n_join
self.list.reverse.join('').to_i
end
end
def generate(array, node=nil)
if array.empty?
node
elsif node.nil?
new_node = LinkedListNode.new(array.pop)
generate(array, new_node)
else
new_node = LinkedListNode.new(array.pop, node)
generate(array, new_node)
end
end
def reverse(list, previous=nil)
head = list.next_node
list.next_node = previous
if head
reverse(head, list)
else
list
end
end
def sum(lista, listb)
lista.numberify(lista)
listb.numberify(listb)
return lista.reverse_n_join + listb.reverse_n_join
end
node1 = LinkedListNode.new(6)
node2 = LinkedListNode.new(1, node1)
list1 = LinkedListNode.new(7, node2)
list1.print
node3 = LinkedListNode.new(2)
node4 = LinkedListNode.new(9, node3)
list2 = LinkedListNode.new(5, node4)
list2.print
p added = sum(list1, list2)
added_list = generate(added.to_s.split('').map(&:to_i).reverse)
added_list.print
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment