Last active
December 14, 2015 18:39
-
-
Save tjhanley/5130934 to your computer and use it in GitHub Desktop.
Linked List in Ruby
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby -wKU | |
require "test/unit" | |
class LinkedList | |
attr_accessor :head | |
def add(value) | |
if self.head.nil? | |
self.head = Node.new(value) | |
elsif self.head && self.head.next_node.nil? | |
self.head.next_node = Node.new(value) | |
else | |
tmp = self.tail | |
tmp.next_node = Node.new(value) | |
end | |
end | |
def remove(value) | |
tmp = self.head | |
while(tmp.value != value) | |
prev = tmp | |
tmp = tmp.next_node | |
end | |
prev.next_node = tmp.next_node | |
return self | |
end | |
def find(value) | |
tmp = self.head | |
while(tmp.value != value) | |
tmp = tmp.next_node | |
end | |
return tmp | |
end | |
def tail | |
return nil unless self.head | |
tmp = self.head | |
while(tmp.next_node) | |
tmp = tmp.next_node | |
end | |
return tmp | |
end | |
def length | |
return nil unless self.head | |
tmp = self.head | |
i = 0 | |
while(tmp.next_node) | |
tmp = tmp.next_node | |
i += 1 | |
end | |
return i | |
end | |
end | |
class Node | |
attr_accessor :value, :next_node | |
def initialize(value,next_node=nil) | |
self.value = value | |
self.next_node = next_node | |
end | |
end | |
class TestLinkedList < Test::Unit::TestCase | |
def test__value_added | |
ll = LinkedList.new | |
ll.add(1) | |
ll.add(2) | |
ll.add(3) | |
assert ll.head.value.eql?(1) | |
assert ll.tail.value.eql?(3) | |
end | |
def test__it_has_head | |
ll = LinkedList.new | |
assert ll.head.nil? | |
ll.add(1) | |
assert ll.head.value.eql?(1) | |
end | |
def test__it_has_tail | |
ll = LinkedList.new | |
ll.add(1) | |
assert ll.tail.value.eql?(1) | |
ll.add(2) | |
assert ll.tail.value.eql?(2) | |
assert ll.tail.next_node.nil? | |
end | |
def test__it_finds_node | |
ll = LinkedList.new | |
10.times do |i| | |
ll.add(i) | |
end | |
node_4 = ll.find(4) | |
assert node_4.value.eql?(4) | |
node_5 = ll.find(5) | |
assert node_5.value.eql?(5) | |
end | |
def test__removes_node | |
ll = LinkedList.new | |
10.times do |i| | |
ll.add(i) | |
end | |
node_4 = ll.find(4) | |
assert node_4.next_node.value.eql?(5) | |
ll.remove(5) | |
assert node_4.next_node.value.eql?(6) | |
end | |
def test__it_returns_length | |
ll = LinkedList.new | |
10.times do |i| | |
ll.add(i) | |
end | |
assert ll.length.eql?(9) | |
end | |
end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$> ./linked_list.rb | |
Run options: | |
# Running tests: | |
...... | |
Finished tests in 0.000599s, 10016.6945 tests/s, 20033.3890 assertions/s. | |
6 tests, 12 assertions, 0 failures, 0 errors, 0 skips |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class SlidingWindow | |
def self.slide_em(arr = [],window=nil) | |
counter = 0 | |
while(counter<=arr.size) | |
p arr[counter..counter+(window-1)] | |
counter += 1 | |
end | |
end | |
end | |
values = %w(1 2 3 4 5 6 7 8 9 10) | |
SlidingWindow.slide_em(values,3) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment