diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..73f69e0 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/linked-lists.iml b/.idea/linked-lists.iml new file mode 100644 index 0000000..f1d2f8a --- /dev/null +++ b/.idea/linked-lists.iml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..510e7fc --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..fae548e --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..630ea95 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,36 @@ +GEM + remote: https://rubygems.org/ + specs: + ansi (1.5.0) + builder (3.2.4) + coderay (1.1.3) + method_source (1.0.0) + minitest (5.14.2) + minitest-reporters (1.4.2) + ansi + builder + minitest (>= 5.0) + ruby-progressbar + minitest-skip (0.0.3) + minitest (~> 5.0) + minitest-spec (0.0.2.1) + minitest (>= 3.0) + pry (0.13.1) + coderay (~> 1.1) + method_source (~> 1.0) + rake (13.0.1) + ruby-progressbar (1.10.1) + +PLATFORMS + ruby + +DEPENDENCIES + minitest + minitest-reporters + minitest-skip + minitest-spec + pry + rake + +BUNDLED WITH + 2.1.4 diff --git a/lib/linked_list.rb b/lib/linked_list.rb index 9e97557..c42c551 100644 --- a/lib/linked_list.rb +++ b/lib/linked_list.rb @@ -7,39 +7,88 @@ def initialize @head = nil end - # Time complexity - ? - # Space complexity - ? + # Time complexity - O(1) + # Space complexity - O(1) def add_first(data) - + new_node = Node.new(data, nil) + new_node.next = head + @head = new_node end - # Time complexity - ? - # Space complexity - ? - def get_first + # My practice :) + # def print() + # cursor = @head + # while cursor != nil + # p cursor.data + # # p cursor.next + # cursor = cursor.next + # end + # end + # Time complexity - O(1) + # Space complexity - O(1) + def get_first + if @head.nil? + return nil + else + return @head.data + end end - # Time complexity - ? - # Space complexity - ? + # Time complexity - O(n) + # Space complexity - O(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 - O(n) + # Space complexity - O(1) def add_last(data) - + if @head == nil + add_first(data) + else + new_node = Node.new(data, nil) + cursor = @head + while cursor.next != nil + cursor = cursor.next + end + cursor.next = new_node + end end - # Time complexity - ? - # Space complexity - ? + # Time complexity - O(n) + # Space complexity - O(1) def get_last - + if @head == nil + return nil + end + cursor = @head + while cursor.next != nil + cursor = cursor.next + end + return cursor.data end - # Time complexity - ? - # Space complexity - ? + # Time complexity - O(n) + # Space complexity - O(1) def get_at_index(index) - + if @head == nil + return nil + end + count = 0 + cursor = @head + while cursor != nil + if count == index + return cursor.data + end + count += 1 + cursor = cursor.next + end end end diff --git a/test/linked_list_test.rb b/test/linked_list_test.rb index bdbbd06..416d937 100644 --- a/test/linked_list_test.rb +++ b/test/linked_list_test.rb @@ -13,6 +13,27 @@ @list = LinkedList.new end + + xdescribe 'muHA HA HA' do + it "AYESHA testing!!!" do + @list.add_first(3) + @list.add_first(25) + @list.add_first(100) + # @list.print() + # @list.add_first(4) + # expect(@list.get_first). must_equal 4 + # expect(@list.length).must_equal 2 + + + @list.add_last(200) + @list.print() + expect(@list.length).must_equal 4 + expect(@list.get_last).must_equal 200 + # expect(@list.get_at_index(0)).must_equal 100 + end + end + + describe 'initialize' do it 'can be created' do @@ -21,7 +42,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 +72,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 +87,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 +114,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