Dodawanie do list w kolejnosci rosnacej

0

Mam taki kod i metode add, ktora dodaje mi element na koniec list. Jak powinna wygladac metoda ktora dodaje mi element w odpowienim miejscu tj aby zachowac elementy w kolejnosci rosnacej

class ListElem
  attr_accessor :v, :next, :prev
  def initialize(val,next_e,prev_e)
    @v = val
    @next = next_e
    @prev = prev_e
  end
end

class Collection
  def initialize()
    @ListE = ListElem.new(nil,nil,nil)
    @ListE.prev = @ListE
    @ListE.next = @ListE
  end

  def add(k)
    a = ListElem.new(k,@ListE,@ListE.prev)
    @ListE.prev.next = a
    @ListE.prev = a
  end
end
0

quick and dirty code http://rextester.com/TWFJHG8844
btw wystarczy przechowywać następny element w węźle (poprzedni jest zbędny)

class E
    attr_accessor :v, :p, :n
    def initialize(v, p, n)
        @v = v
        @p = p
        @n = n
    end
    def to_s
        "e: #{@v}" 
    end
end

class List
    @head = nil    
    def add(v)
        if @head
            c = @head
            while c
                if v < c.v
                    nn = E.new(v, c.p, c)
                    if c.p
                        c.p.n = nn
                    else
                        @head = nn
                    end                    
                    c.p = nn
                    return self
                end
                if c.n.nil?
                    nn = E.new(v, c, nil)
                    c.n = nn
                    return self                    
                end
                c = c.n
            end
        else
            @head = E.new(v, nil, nil)
        end
        self
    end
    def to_s
        a = []
        c = @head
        while c
            a.push("[#{c}]")
            c = c.n
        end
        a.join("->")
    end
end

a = List.new
p a.add(9).add(14).add(4).add(34).add(11).add(7)
puts a
[e: 4]->[e: 7]->[e: 9]->[e: 11]->[e: 14]->[e: 34]

1 użytkowników online, w tym zalogowanych: 0, gości: 1