class DoublyLinkedList

Attributes

head[RW]
last[RW]
length[RW]

Public Class Methods

new() click to toggle source
# File lib/collection_framework/doubly_linked_list/list.rb, line 8
def initialize
  @head = nil
  @last = nil
  @length = 0
end

Public Instance Methods

add_at_head(val) click to toggle source

@param [Object] val @return [nil]

# File lib/collection_framework/doubly_linked_list/list.rb, line 30
def add_at_head(val)
  new_node = DoublyLinkedListNode.new(val, @head, nil)
  if @length.zero?
    @head = new_node
    @last = new_node
  else
    @head.prev = new_node
    @head = new_node
  end
  @length += 1
  nil
end
add_at_index(index, val) click to toggle source

@param [Integer] index where value need to be inserted @param [Object] val which needs to be inserted @return [nil] nil

# File lib/collection_framework/doubly_linked_list/list.rb, line 60
def add_at_index(index, val)
  return if index > length

  case index
  when length
    add_at_tail(val)
  when 0
    add_at_head(val)
  else
    current_index = 0
    current_pointer = @head
    prev_pointer = nil
    while current_index != index
      current_pointer = current_pointer.next
      prev_pointer = current_pointer.prev
      current_index += 1
    end
    new_node = DoublyLinkedListNode.new(val, current_pointer, prev_pointer)
    current_pointer.prev = new_node
    prev_pointer.next = new_node
    @length += 1
  end
end
add_at_tail(val) click to toggle source

@param [Object] val @return [nil]

# File lib/collection_framework/doubly_linked_list/list.rb, line 45
def add_at_tail(val)
  new_node = DoublyLinkedListNode.new(val, nil, @last)
  if @length.zero?
    @head = new_node
  else
    @last.next = new_node
  end
  @last = new_node
  @length += 1
  nil
end
delete_at_index(index) click to toggle source

@param [Integer] index where value need to be inserted @return [nil] nil

# File lib/collection_framework/doubly_linked_list/list.rb, line 86
def delete_at_index(index)
  return if index >= @length

  case index
  when 0
    @head = @head.next
    @head&.prev = nil
  when @length - 1
    @last = @last.prev
    @last.next = nil
  else
    current_index = 0
    current_pointer = @head
    prev_pointer = nil
    while current_index != index
      current_pointer = current_pointer.next
      prev_pointer = current_pointer.prev
      current_index += 1
    end
    prev_pointer.next = current_pointer.next
    current_pointer.next.prev = prev_pointer
  end
  @length -= 1
end
get(index) click to toggle source

@param [Integer] (index) Value of the current Node. @return [Integer] (Return) the value of the node.

# File lib/collection_framework/doubly_linked_list/list.rb, line 16
def get(index)
  return -1 if index >= @length

  current_index = 0
  pointer = @head
  while current_index != index
    pointer = pointer.next
    current_index += 1
  end
  pointer&.val
end
to_s() click to toggle source

@return [String] Return the various values Concatenated with '->'

# File lib/collection_framework/doubly_linked_list/list.rb, line 112
def to_s
  current_pointer = @head
  str = ''
  until current_pointer.nil?
    str += current_pointer.val.to_s
    current_pointer = current_pointer.next
    str += '->' unless current_pointer.nil?
  end
  str
end