diff --git a/.gitignore b/.gitignore index 5e1422c..d4fb4b0 100644 --- a/.gitignore +++ b/.gitignore @@ -48,3 +48,6 @@ build-iPhoneSimulator/ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this: .rvmrc + + +.idea/ diff --git a/lib/linked_list.rb b/lib/linked_list.rb index 9e97557..998b208 100644 --- a/lib/linked_list.rb +++ b/lib/linked_list.rb @@ -7,39 +7,83 @@ def initialize @head = nil end - # Time complexity - ? - # Space complexity - ? + # Time complexity - 1 + # Space complexity - 1 def add_first(data) + new_node = Node.new(data) + if @head.nil? + @head = new_node + else + new_node.next = @head + @head = new_node + end + return @head.data end - # Time complexity - ? - # Space complexity - ? + # Time complexity - 1 + # Space complexity - 1 def get_first - + return @head.nil? ? @head : @head.data end - # Time complexity - ? - # Space complexity - ? + # Time complexity - n + # Space complexity - 1 def length - return 0 + count = 0 + current = @head + + while current != nil + count += 1 + current = current.next + end + return count end - # Time complexity - ? - # Space complexity - ? + # Time complexity - 1 + # Space complexity - 1 def add_last(data) + new_node = Node.new(data) + current = @head + + if current.nil? + @head = new_node + return @head + else + while current.next != nil + current = current.next + end + current.next = new_node + end + return new_node end - # Time complexity - ? - # Space complexity - ? + # Time complexity - n + # Space complexity - 1 def get_last + return nil if @head.nil? + count = 0 + current = @head + while current.next != nil + count += 1 + current = current.next + end + return current.data end - # Time complexity - ? - # Space complexity - ? + # Time complexity - n + # Space complexity - 1 def get_at_index(index) + count = 0 + current = @head + while count != index + count += 1 + return nil if current.nil? + current = current.next + end + return current.data end end diff --git a/test/linked_list_test.rb b/test/linked_list_test.rb index bdbbd06..8e558e7 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 @@ -93,7 +93,7 @@ end 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