diff --git a/lib/linked_list.rb b/lib/linked_list.rb index 9e97557..6f4af86 100644 --- a/lib/linked_list.rb +++ b/lib/linked_list.rb @@ -1,45 +1,82 @@ require_relative 'node' class LinkedList - attr_reader :head + attr_reader :head, :tail def initialize @head = nil end - # Time complexity - ? - # Space complexity - ? + # Time complexity - O(1) + # Space complexity - O(1) def add_first(data) - + @head = Node.new(data, head) end - # Time complexity - ? - # Space complexity - ? + # Time complexity - O(1) + # Space complexity - O(1) def get_first - + return nil if head.nil? + return @head.data end - # Time complexity - ? - # Space complexity - ? + # Time complexity - O(n) + # Space complexity - O(1) def length - return 0 + count = 0 + return count if head.nil? + + current = head + until current.nil? + current = current.next + count += 1 + end + + return count end - # Time complexity - ? - # Space complexity - ? + # Time complexity - O(n) + # Space complexity - O(1) def add_last(data) - + if head.nil? + @head = Node.new(data, nil) + else + current = head + while !current.next.nil? + current = current.next + end + + current.next = Node.new(data, nil) + end end - # Time complexity - ? - # Space complexity - ? + # Time complexity - O(n) + # Space complexity - O(1) def get_last + return nil if head.nil? + current = head + + until current.next.nil? + current = current.next + end + + return current.data end - # Time complexity - ? - # Space complexity - ? + # Time complexity - O(n) + # Space complexity - O(1) def get_at_index(index) + return nil if head.nil? + + current = head + count = 0 + + until count == index + current = current.next + count += 1 + end + return current.data end end diff --git a/lib/node.rb b/lib/node.rb index 469eca3..910fb9e 100644 --- a/lib/node.rb +++ b/lib/node.rb @@ -1,7 +1,7 @@ # defines a node in a linkedList class Node attr_reader :data - attr_accessor :next + attr_accessor :next def initialize(value, nextNode = nil) @data = value diff --git a/test/linked_list_test.rb b/test/linked_list_test.rb index 2a805c7..fac4c41 100644 --- a/test/linked_list_test.rb +++ b/test/linked_list_test.rb @@ -21,7 +21,7 @@ end end - xdescribe 'add_first & get_first' do + describe 'add_first & get_first' do it 'can add values to an empty list' do # Act @list.add_first(3) @@ -51,7 +51,7 @@ end end - xdescribe "length" do + describe "length" do it "will return 0 for an empty list" do expect(@list.length).must_equal 0 end @@ -66,7 +66,7 @@ end end - xdescribe "addLast & getLast" do + describe "addLast & getLast" do it "will add to the front if the list is empty" do @list.add_last(1) expect(@list.get_first).must_equal 1 @@ -91,7 +91,7 @@ end - xdescribe 'get_at_index' do + describe 'get_at_index' do it 'returns nil if the index is outside the bounds of the list' do expect(@list.get_at_index(3)).must_be_nil end