From 75973d59f1e0712c03f45e19ca8ecf650658783a Mon Sep 17 00:00:00 2001 From: "m.dove@live.com" <“m.dove@live.com”> Date: Sun, 8 Dec 2019 23:59:12 -0800 Subject: [PATCH] Finished linked list methods --- lib/linked_list.rb | 45 +++++++++++++++++++++++++++++++++++----- test/linked_list_test.rb | 38 +++++++++++++++------------------ 2 files changed, 57 insertions(+), 26 deletions(-) diff --git a/lib/linked_list.rb b/lib/linked_list.rb index 9e97557..9e879e2 100644 --- a/lib/linked_list.rb +++ b/lib/linked_list.rb @@ -1,4 +1,4 @@ -require_relative 'node' +require_relative "node" class LinkedList attr_reader :head @@ -10,36 +10,71 @@ 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 + count = 0 + temp = @head + while temp != nil + count += 1 + temp = temp.next + end + return count end # Time complexity - ? # Space complexity - ? def add_last(data) + temp = @head + while temp != nil && temp.next != nil + temp = temp.next + end + last_node = Node.new(data) + if (temp != nil) + temp.next = last_node + else + @head = last_node + end end # Time complexity - ? # Space complexity - ? def get_last + temp = @head + while temp != nil && temp.next != nil + temp = temp.next + end + return temp.data end # Time complexity - ? # Space complexity - ? def get_at_index(index) - + temp = @head + count = 0 + while count < index && temp != nil + temp = temp.next + count += 1 + end + if (count == index) + return temp.data + else + return nil + end end end diff --git a/test/linked_list_test.rb b/test/linked_list_test.rb index 2a805c7..311e12d 100644 --- a/test/linked_list_test.rb +++ b/test/linked_list_test.rb @@ -1,9 +1,8 @@ -require 'minitest/autorun' -require 'minitest/reporters' +require "minitest/autorun" +require "minitest/reporters" require "minitest/skip_dsl" -require_relative '../lib/linked_list' - +require_relative "../lib/linked_list" Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new @@ -13,24 +12,24 @@ @list = LinkedList.new end - describe 'initialize' do - it 'can be created' do + describe "initialize" do + it "can be created" do # Assert expect(@list).must_be_kind_of LinkedList end end - xdescribe 'add_first & get_first' do - it 'can add values to an empty list' do + describe "add_first & get_first" do + it "can add values to an empty list" do # Act - @list.add_first(3) + @list.add_first(3) - # Assert - expect(@list.get_first).must_equal 3 + # Assert + expect(@list.get_first).must_equal 3 end - it 'will put the last added item to the front of the list' do + it "will put the last added item to the front of the list" do # Act @list.add_first(1) @list.add_first(2) @@ -45,13 +44,12 @@ expect(@list.get_first).must_equal 3 end - it 'will return `nil` for `getFirst` if the list is empty' do - + it "will return `nil` for `getFirst` if the list is empty" do expect(@list.get_first).must_be_nil 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 +64,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 @@ -86,17 +84,15 @@ expect(@list.get_first).must_equal 2 expect(@list.get_last).must_equal 4 expect(@list.length).must_equal 3 - end - end - xdescribe 'get_at_index' do - it 'returns nil if the index is outside the bounds of the list' 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 - it 'can retrieve an item at an index in the list' do + it "can retrieve an item at an index in the list" do @list.add_first(1) @list.add_first(2) @list.add_first(3)