diff --git a/lib/linked_list.rb b/lib/linked_list.rb index 9e97557..fe37150 100644 --- a/lib/linked_list.rb +++ b/lib/linked_list.rb @@ -10,36 +10,75 @@ def initialize # Time complexity - ? # Space complexity - ? def add_first(data) - + @head = Node.new(data, @head) end # Time complexity - ? # Space complexity - ? def get_first - + if @head == nil + return nil + else + return @head.data + end end # Time complexity - ? # Space complexity - ? def length - return 0 + curr = @head + count = 0 + until curr == nil + count += 1 + curr = curr.next + end + return count end # Time complexity - ? # Space complexity - ? def add_last(data) - + curr = @head + if @head == nil + @head = Node.new(data) + else + until curr.next == nil + curr = curr.next + end + curr.next = Node.new(data) + end end # Time complexity - ? # Space complexity - ? def get_last - + curr = @head + if @head == nil + return nil + else + until curr.next == nil + curr = curr.next + end + return curr.data + end end # Time complexity - ? # Space complexity - ? def get_at_index(index) - + count = 0 + curr = @head + if @head == nil + return nil + elsif index == 0 + return @head.data + else + until count == index || curr.next == nil + curr = curr.next + count += 1 + end + end + return curr.data end + end diff --git a/test/linked_list_test.rb b/test/linked_list_test.rb index 2a805c7..9b5d455 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,12 +66,18 @@ 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 end + it "will return nil if the list is empty" do + expect(@list.get_last).must_be_nil + end + + it "will put new items to the rear of the list" do @list.add_last(2) expect(@list.length).must_equal 1 @@ -91,7 +97,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