Class: DSA::LinkedList::Doubly

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/dsa-ruby/linked_list.rb

Instance Method Summary collapse

Constructor Details

#initializeDoubly

Returns a new instance of Doubly.



138
139
140
141
142
# File 'lib/dsa-ruby/linked_list.rb', line 138

def initialize
  @head = nil
  @tail = nil
  @size = 0
end

Instance Method Details

#backObject

Raises:

  • (IndexError)


189
190
191
192
# File 'lib/dsa-ruby/linked_list.rb', line 189

def back
  raise IndexError, "list is empty" unless @tail
  @tail.val
end

#delete(val) ⇒ Object



194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
# File 'lib/dsa-ruby/linked_list.rb', line 194

def delete(val)
  node = @head
  while node
    if node.val == val
      node.prev.next = node.next if node.prev
      node.next.prev = node.prev if node.next
      @head = node.next if node == @head
      @tail = node.prev if node == @tail
      @size -= 1
      return true
    end
    node = node.next
  end
  false
end

#each(&block) ⇒ Object



239
240
241
242
243
244
245
246
# File 'lib/dsa-ruby/linked_list.rb', line 239

def each(&block)
  return enum_for(:each) unless block_given?
  node = @head
  while node
    yield node.val
    node = node.next
  end
end

#empty?Boolean

Returns:

  • (Boolean)


223
224
225
# File 'lib/dsa-ruby/linked_list.rb', line 223

def empty?
  @size == 0
end

#find(val) ⇒ Object



210
211
212
213
214
215
216
217
# File 'lib/dsa-ruby/linked_list.rb', line 210

def find(val)
  node = @head
  while node
    return node if node.val == val
    node = node.next
  end
  nil
end

#frontObject

Raises:

  • (IndexError)


184
185
186
187
# File 'lib/dsa-ruby/linked_list.rb', line 184

def front
  raise IndexError, "list is empty" unless @head
  @head.val
end

#pop_backObject

Raises:

  • (IndexError)


173
174
175
176
177
178
179
180
181
182
# File 'lib/dsa-ruby/linked_list.rb', line 173

def pop_back
  raise IndexError, "list is empty" unless @tail

  val = @tail.val
  @tail = @tail.prev
  @tail.next = nil if @tail
  @head = nil unless @tail
  @size -= 1
  val
end

#pop_frontObject

Raises:

  • (IndexError)


162
163
164
165
166
167
168
169
170
171
# File 'lib/dsa-ruby/linked_list.rb', line 162

def pop_front
  raise IndexError, "list is empty" unless @head

  val = @head.val
  @head = @head.next
  @head.prev = nil if @head
  @tail = nil unless @head
  @size -= 1
  val
end

#push_back(val) ⇒ Object



153
154
155
156
157
158
159
160
# File 'lib/dsa-ruby/linked_list.rb', line 153

def push_back(val)
  node = DoublyNode.new(val, nil, @tail)
  @tail.next = node if @tail
  @tail = node
  @head ||= node
  @size += 1
  self
end

#push_front(val) ⇒ Object



144
145
146
147
148
149
150
151
# File 'lib/dsa-ruby/linked_list.rb', line 144

def push_front(val)
  node = DoublyNode.new(val, @head, nil)
  @head.prev = node if @head
  @head = node
  @tail ||= node
  @size += 1
  self
end

#sizeObject



219
220
221
# File 'lib/dsa-ruby/linked_list.rb', line 219

def size
  @size
end

#to_aObject



227
228
229
230
231
232
233
234
235
# File 'lib/dsa-ruby/linked_list.rb', line 227

def to_a
  result = []
  node = @head
  while node
    result << node.val
    node = node.next
  end
  result
end