Sha256: 02eb4c64825858150ac9ae8309a8dbff90323c8209302d2ca9d3f575e1e3b5ca

Contents?: true

Size: 1.39 KB

Versions: 1

Compression:

Stored size: 1.39 KB

Contents

module RubyCollections
  class LinkedList
    attr_accessor :size, :top

    def initialize
      @size = 0
      @top = nil
    end

    def isEmpty?
      size.zero?
    end

    def add(data, index = nil)
      return nil if index and index >= size
      if index
        new_node = Node.new data, nil
        get(index-1).setNext(new_node)
      else
        node = Node.new(data, top)
        @top = node
      end
      @size += 1 
    end

    def get(index)
      node = top
      index.times {node = node.getNext}
      return node
    end

    def remove(index)
      node = get(index-1)
      to_be_removed = node.getNext
      node.setNext(to_be_removed.getNext)
      @size -= 1
    end

    def to_s
      data = []
      data << (node = top).data
      (size-1).times {data << (node = node.getNext).data}
      return data.to_s
    end

    class Node
      attr_accessor :data

      def initialize(data, next_node)
        @data = data
        @next = next_node.object_id
      end

      def getNext
        ObjectSpace._id2ref(@next)
      end

      def setNext(node)
        return if node.nil?
        next_node_id = instance_variable_get(:@next)
        @next = node.object_id
        node.instance_variable_set(:@next, next_node_id)
        return node
      end

      def to_s
        "#{data}"
      end
    end

  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ruby_collections-0.0.4 lib/ruby_collections/linked_list.rb