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 +4 -4
- data/README.md +1 -1
- data/lib/linked-list/list.rb +24 -24
- data/lib/linked-list/node.rb +2 -1
- data/lib/linked-list/version.rb +1 -1
- data/linked-list.gemspec +2 -2
- data/test/list_test.rb +12 -0
- data/test/node_test.rb +9 -0
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c20945229e6503af0a2b24018ba42daddf18e1fa
|
4
|
+
data.tar.gz: fdc7f37ae8032cb9fde6e36e2b8822ee7b2e55a3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 55cf32c04d74ba3fe171fed27938c09cd79f4411c8344151ee7b1fe032028f2259c263c8ef50940a4b170ecb15cc79cdc26de8317461f010e7274d51dc33ea27
|
7
|
+
data.tar.gz: e639b4f3c874e46f4a28c218a24d27da981bc544e85a4419fb19d6096db6bdf0ba38b055a4108ad3d8cbb8586cbaa8c94d099c8dc57aa41515f963e30b6e5295
|
data/README.md
CHANGED
data/lib/linked-list/list.rb
CHANGED
@@ -35,7 +35,11 @@ module LinkedList
|
|
35
35
|
node = Node(node)
|
36
36
|
@head ||= node
|
37
37
|
|
38
|
-
|
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
|
-
|
74
|
-
|
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
|
-
|
120
|
-
|
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 =
|
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 { |
|
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
|
-
|
175
|
-
while(
|
176
|
-
yield
|
177
|
-
|
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
|
data/lib/linked-list/node.rb
CHANGED
data/lib/linked-list/version.rb
CHANGED
data/linked-list.gemspec
CHANGED
@@ -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
|
|
data/test/list_test.rb
CHANGED
@@ -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
|
data/test/node_test.rb
CHANGED
@@ -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.
|
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
|
+
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
|