Class: LinkedList
- Inherits:
-
Object
- Object
- LinkedList
- Includes:
- Enumerable
- Defined in:
- lib/lrjew/linked_list.rb
Instance Method Summary collapse
- #delete(node) ⇒ Object
- #each ⇒ Object
-
#initialize ⇒ LinkedList
constructor
A new instance of LinkedList.
- #insert_before(before, after) ⇒ Object
- #length ⇒ Object (also: #size)
- #push(data) ⇒ Object
- #shift ⇒ Object
Constructor Details
#initialize ⇒ LinkedList
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 |
#each ⇒ Object
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 |
#length ⇒ Object 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 |
#shift ⇒ Object
42 43 44 |
# File 'lib/lrjew/linked_list.rb', line 42 def shift delete(@last.prev) unless @last.prev == @first end |