Class: LinkedList

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/lrjew/linked_list.rb

Instance Method Summary collapse

Constructor Details

#initializeLinkedList

Returns a new instance of LinkedList.



4
5
6
7
8
# File 'lib/lrjew/linked_list.rb', line 4

def initialize
  @last = Node.new(nil, nil)
  @first = Node.new(nil, @last)
  @last.prev = @first
end

Instance Method Details

#delete(node) ⇒ Object



29
30
31
32
33
# File 'lib/lrjew/linked_list.rb', line 29

def delete(node)
  node.prev.next = node.next
  node.next.prev = node.prev
  node.data
end

#eachObject



22
23
24
25
26
27
# File 'lib/lrjew/linked_list.rb', line 22

def each
  node = @last
  while (node = node.prev) && node.data
    yield node.data
  end
end

#insert_before(before, after) ⇒ Object



35
36
37
38
39
40
# File 'lib/lrjew/linked_list.rb', line 35

def insert_before(before, after)
  after.prev.next = before
  before.next = after
  before.prev = after.prev
  after.prev = before
end

#lengthObject Also known as: size



46
47
48
# File 'lib/lrjew/linked_list.rb', line 46

def length
  @first.next.length
end

#push(data) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
# File 'lib/lrjew/linked_list.rb', line 10

def push(data)
  case data
  when Node
    insert_before(@first.next, data)
  else
    node = @first.next.push(data)
    @first.next = node
    node.prev = @first
    node
  end
end

#shiftObject



42
43
44
# File 'lib/lrjew/linked_list.rb', line 42

def shift
  delete(@last.prev) unless @last.prev == @first
end