Skip to content

Instantly share code, notes, and snippets.

@tjhanley
Last active December 14, 2015 18:39
Show Gist options
  • Save tjhanley/5130934 to your computer and use it in GitHub Desktop.
Save tjhanley/5130934 to your computer and use it in GitHub Desktop.
Linked List in Ruby
#!/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
$> ./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
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