xxxxxxxxxx
# Ruby program for
# Add two numbers represented by linked list
# Linked list node
class LinkNode
# Define the accessor and reader of class LinkNode
attr_reader :data, :next
attr_accessor :data, :next
def initialize(data)
self.data = data
self.next = nil
end
end
class SingleLL
# Define the accessor and reader of class SingleLL
attr_reader :head, :tail
attr_accessor :head, :tail
def initialize()
self.head = nil
self.tail = nil
end
def insert(data)
node = LinkNode.new(data)
if (self.head == nil)
# Add first node
self.head = node
else
# Add node at the end position
self.tail.next = node
end
# New last node
self.tail = node
end
# Display linked list element
def display()
if (self.head == nil)
return
end
temp = self.head
# iterating linked list elements
while (temp != nil)
print(" ", temp.data ," →")
# Visit to next node
temp = temp.next
end
print(" NULL\n")
end
# Reverse a single linked list
def reverse()
prev = nil
temp = self.head
while (temp != nil)
# New head node
self.head = temp
# Visit to next node
temp = temp.next
# Change node link to pervious node
self.head.next = prev
# Get the newly head node
prev = self.head
end
end
def addition(b)
# Reverse both linked lists
self.reverse()
b.reverse()
# Define some variables
result = SingleLL.new()
carry = 0
x = self.head
y = b.head
# Iterate the both linked lists
while (x != nil || y != nil)
if (x != nil)
# Add node data of x
carry += x.data
# Visit to next node
x = x.next
end
if (y != nil)
# Add node data of y
carry += y.data
# Visit to next node
y = y.next
end
# Add resultant node
result.insert(carry % 10)
# Remove last digit of carry
carry = carry / 10
end
# Add remaining carry digits
while (carry != 0)
# Add resultant node
result.insert(carry % 10)
# Remove last digit of carry
carry = carry / 10
end
# Reverse linked list
b.reverse()
self.reverse()
result.reverse()
# Return result
return result
end
end
def main()
a = SingleLL.new()
b = SingleLL.new()
# 5112
a.insert(5)
a.insert(1)
a.insert(1)
a.insert(2)
# 99999
b.insert(9)
b.insert(9)
b.insert(9)
b.insert(9)
b.insert(9)
# 5112 + 99999
# ------------
# 105111
c = a.addition(b)
c.display()
end
main()
xxxxxxxxxx
# Ruby program for
# Add two numbers represented by linked list
# Linked list node
class LinkNode
# Define the accessor and reader of class LinkNode
attr_reader :data, :next
attr_accessor :data, :next
def initialize(data)
self.data = data
self.next = nil
end
end
class SingleLL
# Define the accessor and reader of class SingleLL
attr_reader :head, :tail
attr_accessor :head, :tail
def initialize()
self.head = nil
self.tail = nil
end
def insert(data)
node = LinkNode.new(data)
if (self.head == nil)
# Add first node
self.head = node
else
# Add node at the end position
self.tail.next = node
end
# New last node
self.tail = node
end
# Display linked list element
def display()
if (self.head == nil)
return
end
temp = self.head
# iterating linked list elements
while (temp != nil)
print(" ", temp.data ," →")
# Visit to next node
temp = temp.next
end
print(" NULL\n")
end
# Reverse a single linked list
def reverse()
prev = nil
temp = self.head
while (temp != nil)
# New head node
self.head = temp
# Visit to next node
temp = temp.next
# Change node link to pervious node
self.head.next = prev
# Get the newly head node
prev = self.head
end
end
def addition(b)
# Reverse both linked lists
self.reverse()
b.reverse()
# Define some variables
result = SingleLL.new()
carry = 0
x = self.head
y = b.head
# Iterate the both linked lists
while (x != nil || y != nil)
if (x != nil)
# Add node data of x
carry += x.data
# Visit to next node
x = x.next
end
if (y != nil)
# Add node data of y
carry += y.data
# Visit to next node
y = y.next
end
# Add resultant node
result.insert(carry % 10)
# Remove last digit of carry
carry = carry / 10
end
# Add remaining carry digits
while (carry != 0)
# Add resultant node
result.insert(carry % 10)
# Remove last digit of carry
carry = carry / 10
end
# Reverse linked list
b.reverse()
self.reverse()
result.reverse()
# Return result
return result
end
end
def main()
a = SingleLL.new()
b = SingleLL.new()
# 5112
a.insert(5)
a.insert(1)
a.insert(1)
a.insert(2)
# 99999
b.insert(9)
b.insert(9)
b.insert(9)
b.insert(9)
b.insert(9)
# 5112 + 99999
# ------------
# 105111
c = a.addition(b)
c.display()
end
main()