linked-list 0.0.8 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5cf89e62ce52b53b8f7662c7b33b13376ef92ae6
4
- data.tar.gz: fa7edc99d8406550a2904270bb19cbcfa5029050
3
+ metadata.gz: c20945229e6503af0a2b24018ba42daddf18e1fa
4
+ data.tar.gz: fdc7f37ae8032cb9fde6e36e2b8822ee7b2e55a3
5
5
  SHA512:
6
- metadata.gz: 27a447dcf94c2b742d113ede66a551956c54c66d0fd58ca9197b4febafc2fab0cd2b25d80e5fa3ebf998782f439a00f85af770b4a264e2ac4ced99f8e0f0b5e5
7
- data.tar.gz: 51f4fe4ffacd1db48697fa9eb6cbef9972f8bab3cf2e1f0b14929d99d3dd4cb9532a0d001a2edbbcb8eda8a08d0561cd59e8398e69033fa27ef9c6fdb922ca41
6
+ metadata.gz: 55cf32c04d74ba3fe171fed27938c09cd79f4411c8344151ee7b1fe032028f2259c263c8ef50940a4b170ecb15cc79cdc26de8317461f010e7274d51dc33ea27
7
+ data.tar.gz: e639b4f3c874e46f4a28c218a24d27da981bc544e85a4419fb19d6096db6bdf0ba38b055a4108ad3d8cbb8586cbaa8c94d099c8dc57aa41515f963e30b6e5295
data/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  # LinkedList
7
7
 
8
- Ruby implementation of Linked List, following some Ruby idioms.
8
+ Ruby implementation of Doubly Linked List, following some Ruby idioms.
9
9
 
10
10
  ## Installation
11
11
 
@@ -35,7 +35,11 @@ module LinkedList
35
35
  node = Node(node)
36
36
  @head ||= node
37
37
 
38
- @tail.next = node if @tail
38
+ if @tail
39
+ @tail.next = node
40
+ node.prev = @tail
41
+ end
42
+
39
43
  @tail = node
40
44
 
41
45
  @length += 1
@@ -56,6 +60,7 @@ module LinkedList
56
60
  @tail ||= node
57
61
 
58
62
  node.next = @head
63
+ @head.prev = node if @head
59
64
  @head = node
60
65
 
61
66
  @length += 1
@@ -70,15 +75,8 @@ module LinkedList
70
75
  def pop
71
76
  return nil unless @head
72
77
 
73
- node = @head
74
- next_to_tail = nil
75
- while(node = node.next)
76
- next_to_tail = node unless node.next
77
- end
78
- @head = nil unless next_to_tail
79
-
80
- tail = @tail
81
- @tail = next_to_tail
78
+ tail = __pop
79
+ @head = nil unless @tail
82
80
 
83
81
  @length -= 1
84
82
  tail.data
@@ -116,16 +114,11 @@ module LinkedList
116
114
  def reverse!
117
115
  return self unless @head
118
116
 
119
- prev_node = __shift
120
- prev_node.next = nil
121
- @tail = prev_node
122
-
123
- while(@head)
124
- curr_node = __shift
125
- curr_node.next = prev_node
126
- prev_node = curr_node
117
+ __each do |curr_node|
118
+ curr_node.prev, curr_node.next = curr_node.next, curr_node.prev
127
119
  end
128
- @head = prev_node
120
+ @head, @tail = @tail, @head
121
+
129
122
  self
130
123
  end
131
124
 
@@ -138,7 +131,7 @@ module LinkedList
138
131
  #
139
132
  def each
140
133
  return to_enum(__callee__) unless block_given?
141
- __each { |e| yield(e.data) }
134
+ __each { |node| yield(node.data) }
142
135
  end
143
136
 
144
137
  # Converts list to array.
@@ -170,11 +163,18 @@ module LinkedList
170
163
  head
171
164
  end
172
165
 
166
+ def __pop
167
+ tail = @tail
168
+ @tail = @tail.prev
169
+ @tail.prev = nil if @tail
170
+ tail
171
+ end
172
+
173
173
  def __each
174
- next_node = @head
175
- while(next_node)
176
- yield next_node
177
- next_node = next_node.next
174
+ curr_node = @head
175
+ while(curr_node)
176
+ yield curr_node
177
+ curr_node = curr_node.next
178
178
  end
179
179
  end
180
180
  end
@@ -1,10 +1,11 @@
1
1
  module LinkedList
2
2
  class Node
3
- attr_accessor :data, :next
3
+ attr_accessor :data, :next, :prev
4
4
 
5
5
  def initialize(data)
6
6
  @data = data
7
7
  @next = nil
8
+ @prev = nil
8
9
  end
9
10
 
10
11
  # Conversion function, see +Conversions.Node+.
@@ -1,5 +1,5 @@
1
1
  module Linked
2
2
  module List
3
- VERSION = '0.0.8'
3
+ VERSION = '0.0.9'
4
4
  end
5
5
  end
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
8
8
  spec.version = Linked::List::VERSION
9
9
  spec.authors = ['Yury Velikanau']
10
10
  spec.email = ['yury.velikanau@gmail.com']
11
- spec.description = %q{Ruby implementation of Linked List, following some Ruby idioms.}
12
- spec.summary = %q{Ruby implementation of Linked List, following some Ruby idioms.}
11
+ spec.description = %q{Ruby implementation of Doubly Linked List, following some Ruby idioms.}
12
+ spec.summary = %q{Ruby implementation of Doubly Linked List, following some Ruby idioms.}
13
13
  spec.homepage = 'https://github.com/spectator/linked-list'
14
14
  spec.license = 'MIT'
15
15
 
@@ -42,6 +42,12 @@ describe LinkedList::List do
42
42
  assert_equal node_1.next, node_2
43
43
  end
44
44
 
45
+ it 'sets reference to the prev node' do
46
+ list.push(node_1)
47
+ list.push(node_2)
48
+ assert_equal node_2.prev, node_1
49
+ end
50
+
45
51
  it 'increases list length by 1' do
46
52
  list.push(node_1)
47
53
  assert_equal 1, list.length
@@ -75,6 +81,12 @@ describe LinkedList::List do
75
81
  assert_equal node_2.next, node_1
76
82
  end
77
83
 
84
+ it 'sets reference to the prev node' do
85
+ list.unshift(node_1)
86
+ list.unshift(node_2)
87
+ assert_equal node_1.prev, node_2
88
+ end
89
+
78
90
  it 'increases list length by 1' do
79
91
  list.unshift(node_1)
80
92
  assert_equal 1, list.length
@@ -11,6 +11,10 @@ describe LinkedList::Node do
11
11
  it 'assigns nil to next' do
12
12
  assert_nil node.next
13
13
  end
14
+
15
+ it 'assigns nil to prev' do
16
+ assert_nil node.prev
17
+ end
14
18
  end
15
19
 
16
20
  describe 'accessors' do
@@ -23,6 +27,11 @@ describe LinkedList::Node do
23
27
  node.next = 'bar'
24
28
  assert_equal 'bar', node.next
25
29
  end
30
+
31
+ it '#prev' do
32
+ node.prev = 'xyz'
33
+ assert_equal 'xyz', node.prev
34
+ end
26
35
  end
27
36
 
28
37
  describe 'conversion' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: linked-list
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yury Velikanau
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-11 00:00:00.000000000 Z
11
+ date: 2013-12-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -78,7 +78,7 @@ dependencies:
78
78
  - - '>='
79
79
  - !ruby/object:Gem::Version
80
80
  version: '0'
81
- description: Ruby implementation of Linked List, following some Ruby idioms.
81
+ description: Ruby implementation of Doubly Linked List, following some Ruby idioms.
82
82
  email:
83
83
  - yury.velikanau@gmail.com
84
84
  executables: []
@@ -124,7 +124,7 @@ rubyforge_project:
124
124
  rubygems_version: 2.1.11
125
125
  signing_key:
126
126
  specification_version: 4
127
- summary: Ruby implementation of Linked List, following some Ruby idioms.
127
+ summary: Ruby implementation of Doubly Linked List, following some Ruby idioms.
128
128
  test_files:
129
129
  - test/conversions_test.rb
130
130
  - test/list_test.rb