linked-list 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
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