mirror of
https://github.com/TheAlgorithms/Ruby
synced 2025-01-08 05:24:29 +01:00
79 lines
No EOL
1.4 KiB
Ruby
79 lines
No EOL
1.4 KiB
Ruby
# Define a node in the list
|
|
class Node
|
|
attr_accessor :value, :next
|
|
def initialize(value)
|
|
@value = value
|
|
@next = nil
|
|
end
|
|
end
|
|
|
|
# A Class for single linked lists (each element links to the next one, but not to the previous one)
|
|
|
|
class SingleList
|
|
attr_accessor :head
|
|
def initialize()
|
|
@head = nil
|
|
end
|
|
|
|
def insert_tail(value)
|
|
newNode = Node.new(value)
|
|
if (@head == nil)
|
|
@head = newNode
|
|
else
|
|
tempNode = @head
|
|
while (tempNode.next != nil)
|
|
tempNode = tempNode.next
|
|
end
|
|
tempNode.next = newNode
|
|
end
|
|
end
|
|
|
|
def insert_head(value)
|
|
newNode = Node.new(value)
|
|
if (@head == nil)
|
|
@head = newNode
|
|
else
|
|
newNode.next = @head
|
|
@head = newNode
|
|
end
|
|
end
|
|
|
|
def print_list()
|
|
print "["
|
|
if (@head != nil)
|
|
printNode = @head
|
|
while (printNode != nil)
|
|
print "#{printNode.value}"
|
|
if (printNode.next != nil)
|
|
print ", "
|
|
end
|
|
printNode = printNode.next
|
|
end
|
|
end
|
|
print "]"
|
|
STDOUT.flush
|
|
end
|
|
|
|
def delete_head
|
|
if (@head != nil) && (@head.next != nil)
|
|
newHead = @head.next
|
|
@head = newHead
|
|
elsif (@head != nil) && (@head.next == nil)
|
|
@head = nil
|
|
end
|
|
end
|
|
|
|
def delete_tail
|
|
if (@head != nil)
|
|
tempNode = @head
|
|
while (tempNode.next.next != nil)
|
|
tempNode = tempNode.next
|
|
end
|
|
tempNode.next = nil
|
|
end
|
|
end
|
|
|
|
def isEmpty()
|
|
return (@head==nil)
|
|
end
|
|
end |