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