class Algoru::SingleLinkedList

Public Class Methods

new() click to toggle source
# File lib/algoru/data_structure/linked_list/single_linked_list.rb, line 15
def initialize
  @head = nil
end

Public Instance Methods

append(value) click to toggle source

append a node

# File lib/algoru/data_structure/linked_list/single_linked_list.rb, line 20
def append(value)
  if @head
    find_tail.next = Node.new(value)
  else
    @head = Node.new(value)
  end
end
append_after(target, value) click to toggle source

append node after target node

# File lib/algoru/data_structure/linked_list/single_linked_list.rb, line 57
def append_after(target, value)
  node = find(target)

  old_next = node.next
  node.next = Node.new(value)
  node.next.next = old_next
end
append_before(target, value) click to toggle source

append node before target node

# File lib/algoru/data_structure/linked_list/single_linked_list.rb, line 66
def append_before(target, value)
  node = find_before(target)

  old_next = node.next
  node.next = Node.new(value)
  node.next.next = old_next
end
delete(target) click to toggle source

delete target node

# File lib/algoru/data_structure/linked_list/single_linked_list.rb, line 75
def delete(target)
  if @head.value == target
    @head = @head.next
    return
  end

  node = find_before(target)
  node.next = node.next.next
end
find(target) click to toggle source

find node which value equals target

# File lib/algoru/data_structure/linked_list/single_linked_list.rb, line 39
def find(target)
  node = @head
  return node if node.value == target while (node = node.next)
end
find_before(target) click to toggle source

find node before target node

# File lib/algoru/data_structure/linked_list/single_linked_list.rb, line 45
def find_before(target)
  node = @head

  return false if node.next.nil?
  return node if node.next.value == target

  while (node = node.next)
    return node if node.next && node.next.value == target
  end
end
find_tail() click to toggle source

find tail node

# File lib/algoru/data_structure/linked_list/single_linked_list.rb, line 29
def find_tail
  node = @head
  return node if node.next.nil?

  if node.next.nil?
    return node
  end while (node = node.next) # node = node.next means point current node address to the next node address
end
print() click to toggle source

print node by order