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