Class: DSA::LinkedList::Doubly
- Inherits:
-
Object
- Object
- DSA::LinkedList::Doubly
- Includes:
- Enumerable
- Defined in:
- lib/dsa-ruby/linked_list.rb
Instance Method Summary collapse
- #back ⇒ Object
- #delete(val) ⇒ Object
- #each(&block) ⇒ Object
- #empty? ⇒ Boolean
- #find(val) ⇒ Object
- #front ⇒ Object
-
#initialize ⇒ Doubly
constructor
A new instance of Doubly.
- #pop_back ⇒ Object
- #pop_front ⇒ Object
- #push_back(val) ⇒ Object
- #push_front(val) ⇒ Object
- #size ⇒ Object
- #to_a ⇒ Object
Constructor Details
#initialize ⇒ Doubly
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
#back ⇒ Object
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
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 |
#front ⇒ Object
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_back ⇒ Object
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_front ⇒ Object
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 |
#size ⇒ Object
219 220 221 |
# File 'lib/dsa-ruby/linked_list.rb', line 219 def size @size end |
#to_a ⇒ Object
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 |